IEnumerable的非泛型版本是否支持延迟执行?

时间:2011-01-07 04:14:10

标签: c# ienumerable deferred-execution

如果是这样,它支持哪些.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;
    }
}

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子句将被放弃。