2011-01-07 49 views
3

如果是这样,它支持哪些.NET Framework版本?IEnumerable的非通用版本是否支持延期执行?

我已经在.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

迭代器(yield关键字)首次在VS2005附带的C#版本2中可用。 – 2011-01-07 05:43:13

回答

4

是的,这是自从yield关键字是支持的。唯一的区别是它或多或少的IEnumerable<object>,这可能会导致效率低下,如果它不得不拳击。除此之外,它完全一样。

+1

延迟执行与'yield'无关。 `yield`只是语法糖。没有理由不能使用IEnumerable在.NET 1.0中推迟执行。 – leppie 2011-01-07 04:51:14

1

由于yield关键字被缩减为编译器技巧,可能这应该起作用。它当然适用于2.0运行时;然而,我不愿意对1.1做任何陈述。

0

非泛型IEnumerable不实现IDisposable。当使用不支持IEnumerable(Of T)的枚举器时,VB.Net和C#可能会鸭式输入IDisposable或.Dispose()方法,但肯定不能依赖非泛型的所有使用者IEnumerable这样做。如果一个枚举的使用者不正确.Dispose()它,则抛弃枚举数(包括显式或隐式最终子句)的执行。

相关问题