2013-03-06 53 views
2

我想創建一個方法,從xml文件收集自定義的孩子節點值,並從窗體重寫白色數據。我有一個想法,我收集在ArrayList中的數據並將其提供給該方法。但我不能在foreach中改變它,因爲它會拋出ArgumentOutOfRangeException(儘管ArraList包含8個元素,增量變量的值也是8)。所以我會尋求幫助。如何編寫Xelement值?

這裏是代碼:

public static void Search(ArrayList nodeIds, ArrayList values) 
     { 
      XDocument doc = XDocument.Load("Options.xml"); 
      int i = 0; 
      foreach (XElement option in doc.Descendants("BasicOptions")) 
      { 
       foreach(string nodeId in nodeIds) 
       { 
        if (option.Attribute("id").Value == nodeId) 
        { 
         foreach (XElement prop in option.Nodes()) 
         { 
          prop.Value = values[i].ToString(); 
          i++; 
         } 
        } 
       } 
      } 
      doc.Save("Options.xml"); 
    } 
+0

確定** **我不出來範圍?與我== 8和values.Count == 8它會崩潰... – 2013-03-06 13:53:42

+2

ArrayList ???那是什麼? – 2013-03-06 13:54:19

+0

@MatíasFidemraizer你不覺得看到ArrayList和LINQ to XML一起感動嗎? – 2013-03-06 13:59:44

回答

1

在我看來,這i將走出去的範圍,而不問題,因爲它被聲明內外兼修 foreach報表及中心foreach內使用。你應該重新考慮你的方法。

我建議,但不知道你的傳入值或爲什麼你打電話這一點,redclare內部foreach作爲for聲明如下所示:

public static void Search(ArrayList nodeIds, ArrayList values) 
{ 
    XDocument doc = XDocument.Load("Options.xml"); 
    foreach (XElement option in doc.Descendants("BasicOptions")) 
    { 
     foreach (string nodeId in nodeIds) 
     { 
      if (option.Attribute("id").Value == nodeId) 
      { 
       var nodes = option.Nodes().ToList(); 
       for (int i = 0; i < nodes.Count && i < values.Count; i++) 
       { 
        XElement node = (XElement)nodes[i]; 
        node.Value = values[i].ToString(); 
       } 
      } 
     } 
    } 
    doc.Save("Options.xml"); 
} 
+0

非常感謝,你救了我的一天:)這幾乎是我沒有嘗試的唯一方式。但現在是完美的作品。我會盡快爲您投票。 – NeverJr 2013-03-06 20:35:44