C# foreach何时解析容器?
在这种情况下,编译器是否能够确定myDictionary[key]始终是相同的,而不是在foreach的每次迭代中对[key]进行哈希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
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
}
}