-1

以下の場合に IEnumerator インスタンスをリセットするにはどうすればよいですか? (e.Reset() は NotImplementedException をスローします)

    void Main()
    {
       IEnumerator<string> e = new List<string> { "a", "b", "c" }.Select(o => o).GetEnumerator();

       while( e.MoveNext() ) 
       {
           Console.WriteLine( e.Current );
       }

       if( 
            //some condition
         ) 
       {
           e.Reset();

           while( e.MoveNext() ) 
           {
               //Do something else with e.Current
           }
       }

    }
4

2 に答える 2

2

メソッドの「実装」は次のようになるためです

public void Reset() {
  throw new NotImplementedException();
}

MSDN からの参照用:

Reset メソッドは、COM の相互運用性のために提供されています。必ずしも実装する必要はありません。代わりに、実装者は単純に NotSupportedException をスローできます。

この場合、使用される例外タイプは、その推奨事項からの逸脱です。

于 2013-03-01T10:20:58.123 に答える
0

ドキュメントを見ると、説明は次のとおりです。

リセット方式は、COMの相互運用性のために提供されています。必ずしも実装する必要はありません。代わりに、実装者は単にNotSupportedExceptionをスローできます。

実装者への注意Resetのすべての呼び出しは、列挙子に対して同じ状態になる必要があります。推奨される実装は、列挙子をコレクションの先頭、最初の要素の前に移動することです。これにより、列挙子が作成されてからコレクションが変更された場合、列挙子が無効になります。これは、MoveNextおよびCurrentと一致しています。

于 2013-03-01T10:22:58.270 に答える