2009-04-08 127 views
6

讓我們假設我用通過在這種情況下,一個節點列表每個循環迭代

foreach(XmlNode nodeP in node.SelectNodes("Property")) 
{ 
    propsList.Add(nodeP.Attributes["name"].Value, true); 
} 

迭代代碼並表達node.SelectNodes(「該物業」),得到的每個每次迭代中評估或一次?

+0

你在用什麼語言? – 2009-04-08 13:30:59

+0

我編輯了標籤,因爲這與XML沒有任何關係 - 這只是爲了處理foreach循環的工作原理。如果有人不同意,請隨時恢復。 – 2009-04-08 13:32:44

回答

11

只有一次。 foreach語句是語法糖(你的情況)......

{ 
    IEnumerator<XmlNode> enumerator = node.SelectNodes("Property").GetEnumerator(); 

    XmlNode nodeP; 

    while(enumerator.MoveNext()) 
    { 
     nodeP = enumerator.Current; 

     propsList.Add(nodeP.Attributes["name"].Value, true); 
    } 

    IDisposable disposable = enumerator as IDisposable; 

    if(disposable != null) disposable.Dispose(); 
} 

所以要SelectNodes()實際調用只發生一次。

4

看起來你在問C#/ .NET。 SelectNodes()調用將進行一次,然後將從返回值(實現IEnumerable)中檢索枚舉器。該枚舉器是在循環中使用的,不需要對SelectNodes()進行後續調用。