2011-01-07 2 views
3

もしそうなら、.NET Frameworkのどのバージョンに対応していますか?非汎用バージョンのIEnumerableは遅延実行をサポートしていますか?

私は、.NET Framework 4.0でこれをテストして、それが正常に動作します:yieldキーワードがあったため

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で初めて使用可能になりました。 –

答えて

4

はい、それは、これまでサポートされています。唯一の違いは、多かれ少なかれ、それがボクシングをしなければならない場合、非効率につながる可能性がありますそれはより多くのまたはIEnumerable<object>です。それ以外は全く同じです。

+1

遅延実行は 'yield'とは関係ありません。 'yield'は構文の砂糖です。 'IEnumerable'を使って.NET 1.0で遅延実行を行うことができない理由はありません。 – leppie

+0

真。しかし、OPの例では、特に1.0をターゲットにしていないことを示す歩留まりを使用しています。 (最近の人は誰ですか?) –

+0

収量は単なる構文的な砂糖であることを思い出していただきありがとうございます。 1.0の使用に関しては、私は同意します –

1

yieldというキーワードがコンパイラのトリッキーになるため、これはうまくいくはずです。これは確かに2.0ランタイムで動作します。しかし、私は1.1についての陳述をするのをためらっています。

0

非汎用IEnumerableはIDisposableを実装していません。 IEnumerable(Of T)をサポートしていない列挙子を使用する場合、VB.NetとC#がIDisposableまたは.Dispose()メソッドのいずれかをダックすることがありますが、非ジェネリックのすべてのコンシューマーこれを行うにはIEnumerable。列挙型のコンシューマが.Dispose()を適切に実行しない場合、明示的または暗黙的なfinally節を含むの実行が破棄されます()。

関連する問題