让我们假设我用来迭代节点列表的代码
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()只发生一次.