2011-01-07 73 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()它,則拋棄枚舉數(包括顯式或隱式最終子句)的執行。

相關問題