![]() |
1
5
我有一个 article about iterator block implementation 这可能会对您有所帮助,但我不会太担心编译后的代码是什么样子的。在某些情况下,C#编译器几乎肯定会生成不必要的代码,因为这样可以使编译器更简单。迭代器块必须非常复杂才能得到正确的结果(它可能会变得非常复杂,有finally块和迭代器处理),所以我认为相信JIT可以优化掉不必要的位,比如生成代码中的switch/case。 |
![]() |
2
4
|
![]() |
3
1
不管怎样,你可能熟悉状态机?当您用C#(yield stuff)编写生成器时,您告诉编译器发出一个匿名类型,该类型将该生成器实现为一个状态机。这是一种很好的形式化方法,可以验证。这可能就是它看起来如此的原因。 |