反復

2009-04-08 16 views
6

は、それぞれのそれぞれの反復中に表現node.SelectNodes(「プロパティ」)に評価を受けるん私たちは、私はこのケースでノードリスト反復

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

を反復処理するために使用するコードを仮定しましょうまたは一度?

+0

これはどの言語で作業していますか? –

+0

これはXMLとは特に関係がないため、タグを編集しました。これはforeachループの仕組みと関係しています。誰かが同意しない場合は、元気に戻してください。 –

答えて

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()への実際の呼び出しは一度だけ発生します。

+0

この特定の質問には関係しませんが、列挙子が使い捨てであれば、処分されます。 –

+0

@Marc:ありがとう!編集されました。 、 –

+0

ことを忘れそのコードは、2つのため の優れている(INT I = 0; I

4

C#/ .NETについて質問しているようです。 SelectNodes()呼び出しが一度行われ、列挙子が戻り値(IEnumerableを実装する)から取得されます。その列挙子は、ループ中に使用されるものであり、その後のSelectNodes()への呼び出しは必要ありません。