对于每个循环迭代

Sid*_*noy 6 c# enumeration

让我们假设我用来迭代节点列表的代码

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

在这种情况下,表达式node.SelectNodes("Property")是否在每次迭代期间为每个或一次进行评估?

Ada*_*son 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();
}
Run Code Online (Sandbox Code Playgroud)

所以实际的呼叫SelectNodes()只发生一次.