c# - 对于每个循环迭代

标签 c# enumeration

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

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

在这种情况下,表达式 node.SelectNodes("Property") 是否在 for each 或 once 的每次迭代期间得到评估?

最佳答案

只有一次。 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() 的实际调用只会发生一次。

关于c# - 对于每个循环迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/730008/

相关文章:

c# - 如何将 Linq 动态查询结果转换为自定义类?

hashmap - 使用数据库中的值填充枚举

c# - 使用 AppDomain.CreateInstanceAndUnwrap 方法时为 "Unable to cast transparent proxy to type"

enumeration - Ada:如何将枚举打印为小写

ios - Swift - 基于键的映射字典

java - InitialDirContext.search() 结果错误

c++ - C++ 中的灵活枚举

c# - 为什么在捕获到 Exception 时停止调用 Timer 回调?

c# - 反转对象或用减号将其标记为负数

c# - ASP.NET MVC 客户端验证消息错误