如果是这样,它支持哪些.NET Framework版本?
我在.NET Framework 4.0上测试了它,它运行正常:
using System;
using System.Collections.Generic;
public class TestClass
{
public IEnumerable Defer()
{
yield return 1;
yield return 2;
yield return 3;
}
}
答案 0 :(得分:4)
是的,自yield
关键字以来,它一直受支持。唯一的区别是它或多或少IEnumerable<object>
,如果必须做拳击,可能会导致效率低下。除此之外,它完全一样。
答案 1 :(得分:1)
由于yield
关键字被简化为编译器技巧,大概这应该有效。它肯定适用于2.0运行时;不过,我会毫不犹豫地发表关于1.1的任何陈述。
答案 2 :(得分:1)
非通用IEnumerable不实现IDisposable。可能是VB.Net和C#在使用不支持IEnumerable(Of T)的枚举器时会使用IDisposable或.Dispose()方法,但是当然不能依赖于非泛型的所有使用者。 IEnumerable这样做。如果枚举的使用者没有正确.Dispose()它,枚举器的执行,包括显式或隐式的finally子句将被放弃。