Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# foreach何时解析容器?_C#_.net_Foreach - Fatal编程技术网

C# foreach何时解析容器?

C# foreach何时解析容器?,c#,.net,foreach,C#,.net,Foreach,在这种情况下,编译器是否能够确定myDictionary[key]始终是相同的,而不是在foreach的每次迭代中对[key]进行哈希 foreach(Value v in myDictionary[key]) 我知道枚举是懒惰的,我怀疑在这种情况下,.Where只解析一次并返回foreach的完整集合,但这只是一种预感 根据问题判断,foreach即使在场景1中也在执行.GetEnumerable,因此它返回所使用的内容,因此它只解析一次,而不是每次迭代都解析。 扩展到 foreach (V

在这种情况下,编译器是否能够确定myDictionary[key]始终是相同的,而不是在foreach的每次迭代中对[key]进行哈希

foreach(Value v in myDictionary[key])
我知道枚举是懒惰的,我怀疑在这种情况下,.Where只解析一次并返回foreach的完整集合,但这只是一种预感

根据问题判断,foreach即使在场景1中也在执行.GetEnumerable,因此它返回所使用的内容,因此它只解析一次,而不是每次迭代都解析。

扩展到

foreach (V v in x) embedded-statement
如您所见,
x
只使用一次,通过调用枚举器上的
GetEnumerator
来获取枚举器。因此,字典查找将只执行一次。后来,它只关心那个枚举器,而不关心它来自哪里

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