C# foreach循环如何解释收益率?

C# foreach循环如何解释收益率?,c#,C#,foreach循环如何解释收益率 foreach循环看起来像这样: var tmp = obj.GetEnumerator(); int i; // up to C# 4.0 while(tmp.MoveNext()) { int i; // C# 5.0 i = tmp.Current; {...} // your code } 据我所知,编译器必须以某种方式用IEnumerable/IEnumerable接口中的MoveNext&Currentproperty替换y

foreach循环如何解释收益率

foreach循环看起来像这样:

var tmp = obj.GetEnumerator();
int i; // up to C# 4.0
while(tmp.MoveNext()) {
    int i; // C# 5.0
    i = tmp.Current;
    {...} // your code
}

据我所知,编译器必须以某种方式用IEnumerable/IEnumerable接口中的MoveNext&Currentproperty替换yield return。

编译器创建一个状态机,每次调用MoveNext时,它都会移动到下一个状态,并通过current属性为当前状态返回正确的值

此状态机可能是无限的,例如,当您将收益率回报置于无限循环或循环内时。当最后一个状态为有限时,MoveNext返回false,让调用者知道没有更多结果


Jon Skeet有一篇关于这方面的非常好的文章:。

编译器创建了一个状态机,它在每次调用MoveNext时都会移动到下一个状态,并通过current属性为当前状态返回正确的值

此状态机可能是无限的,例如,当您将收益率回报置于无限循环或循环内时。当最后一个状态为有限时,MoveNext返回false,让调用者知道没有更多结果

Jon Skeet有一篇关于这方面的很好的文章: