foreach纯粹是"语法糖"吗?

Cui*_*崔鹏飞 14 .net c# syntax foreach syntactic-sugar

当与数组一起使用时,编译器将foreach循环编译成类似for循环的循环foreach.并且当与or一起使用时,编译器将foreach循环编译成类似while循环的循环.那么这是否是纯粹?或者有什么复杂的东西吗?foreachIEnumerableIEnumerable<T>foreachsyntactic sugar

CLR知道foreach吗?foreach在MSIL代码中是否有专门设计的内容?

Jon*_*eet 27

这是纯粹的语法糖,你可以在没有它的情况下获得相同的行为,是的.许多其他的东西都是一样的...... for,while等等......为了错误引用阿基米德:"给我ifgoto,我将撬动代码..."

不,CLR没有任何概念foreach.


Dan*_*ose 10

它是语法糖.但是,请注意foreach通过调用GetEnumerator(),然后调用MoveNext()来工作,直到没有返回更多项,然后始终在先前获取的枚举器上调用Dispose().如果你想以同样的方式去做,不要忘记Dispose()!

此外,CLR还有一些与获取枚举器相关的技巧.例如,请参见此处此处.