6

これは悪い考えですか?

Private Class GH_DataStructureEnumerator(Of Q As Types.IGH_Goo)
  Implements IEnumerable(Of Q)
  Implements IEnumerator(Of Q)
  ....
  ....
  'Current, MoveNext, Reset etc.'
  ....
  ....

  Public Function GetEnumerator_Generic() As IEnumerator(Of Q) _
                  Implements IEnumerable(Of Q).GetEnumerator
    Return Me
  End Function
End Class

このクラスは、IEnumerable(Of T)読み取り専用プロパティとしてのみ表示され、IEnumerator(Of T)をラップする追加のクラスを保存します。しかし、どういうわけかそれは間違っているようです。もっと良い方法はありますか?

4

3 に答える 3

7

間違いなく悪い考えです。特に、への2つの呼び出しは、独立したイテレータGetEnumeratorを返す必要があるときに、同じオブジェクトへの参照を返すことを意味します。

そうは言っても、イテレータブロックを使用すると、C#コンパイラは両方の型を実装するクラスを生成します...しかし、それが正しく行われるようにするためには非常に長い時間がかかります。私はあなたがその痛みを乗り越えないことをお勧めします:)

于 2010-03-25T20:40:11.620 に答える
5

誰かがあなたのコレクションを同時に複数回列挙しようとすると、ソリューションが機能しなくなるため、これは悪い考えです。

例:これは何らかの形で壊れます

For Each cur1 in yourObj 
  For Each cur2 in yourObj
    Console.WriteLine("{0} - {1}", cur1,cur2)
  Next
Next
于 2010-03-25T20:40:25.070 に答える
1

IEnumerableの実装から:

「Enumerator」と呼ばれるネストされたパブリック構造体を返すGetEnumerator()メソッドを提供してください。

ちなみに、このWebサイトは、 FrameworkDesignGuidelinesの作成者の1人であるBradAbramsによって管理されています。

于 2010-03-25T20:41:32.213 に答える