7

ノードリストを反復処理するために使用するコードを想定してみましょう

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

この場合、式 node.SelectNodes("Property") は、 for each または once の各反復中に評価されますか?

4

2 に答える 2

11

1回だけ。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()は 1 回だけです。

于 2009-04-08T13:31:12.207 に答える
4

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

于 2009-04-08T13:33:01.857 に答える