c# - C# 中的 foreach 重新计算

标签 c#

如果我用 C# 编写一个 foreach 语句:

foreach(String a in veryComplicatedFunction())
{

}

它会在每次迭代或只计算一次 veryComplicatedFunction 并将其存储在某个地方吗?

最佳答案

您的问题已在 12.9.5 部分得到解答规范,其中规定:


The above steps, if successful, unambiguously produce a collection type C, enumerator type E and element type T. A foreach statement of the form

foreach (V v in x) embedded-statement

is then expanded to:

{
    E e = ((C)(x)).GetEnumerator();
    try {
        V v;
        while (e.MoveNext()) {
            v = (V)(T)e.Current;
            embedded-statement
        }
    }
    finally {
        … // Dispose e
    }
}

如您所见,在展开式中,表达式 x 仅被求值一次。

关于c# - C# 中的 foreach 重新计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1517686/

相关文章:

c# - 是否可以将任意数据保存到 C# 中的文件中?

c# - IncludeExceptionDetailInFaults 不像想象的那样表现

c# - 将 C# 属性完全按照属性类型命名还是使用更短的字符串更好?

c# - 如何通过 CREATE_CONTENT 权限过滤 Facebook 页面?

c# - 使用 Kinect SDK 的 body 点云

c# - 附加/连接两个 IEnumerable 序列

c# - 尝试调用不存在的操作会创建一个永久请求

c# - Task.Delay 在专用线程上有意义吗?

c# - 系统.InvalidCastException : Specified cast is not valid

javascript - 如何从下拉列表中读回对象