質問

このコードを持っています

public class SomeClass<T>: IEnumerable<T>
{
    public List<SomeClass<T>> MyList = new List<SomeClass<T>>();

    public IEnumerator<T> GetEnumerator()
    {
        throw new NotImplementedException();
    }
}

MyListからIEnumeratorを抽出するにはどうすればよいですか

StackoverFlowerに感謝します。...

役に立ちましたか?

解決

これ:

public List<SomeClass<T>> MyList = new List<SomeClass<T>>();

これである必要がある:

public List<T> MyList = new List<T>();

その後、これは動作するはずです:

public IEnumerator<T> Getenumerator ()
{
  foreach (var item in MyList){
     yield return item;}
}

所有することはできません

List<SomeClass<T>>
列挙子が&lt; T&gt; の列挙可能な項目を返すことをインターフェイスで指定したため、列挙子をプルする

IEnumerable&lt; T&gt; を次のように変更することもできます

IEnumerable<SomeClass<T>>

そして列挙子を

に変更します
public IEnumerator<SomeClass<T>> Getenumerator ()
{
  foreach (var item in MyList){
     yield return item;}
}

他のヒント

簡単なオプションは return MyList.GetEnumerator()です。

ケビンスの答えは正しいであり、怠>です(さらに良い)です。 Trodekレスポンスを使用すると、次の例外がスローされます。

Cannot implicitly convert type `System.Collections.Generic.List<SomeClass<T>>.Enumerator' to `System.Collections.Generic.IEnumerator<T>'(CS0029)

それでも、コメントを追加したい。 yield return を使用すると、さまざまな値を返すステートマシンが生成されます。ネストされたデータ構造(ツリーなど)を使用する場合、yield returnを使用すると、すべてのサブ構造に異なるステートマシンが作成されるため、より多くのメモリが割り当てられます。

まあ、それらは私の2セントです!

オブジェクトSomeClassからオブジェクトTを取得する方法があると仮定すると、

public IEnumerator<T> GetEnumerator()
{
    return MyList.Select(ml => ml.GetT() /* operation to get T */).GetEnumerator();
}

メッセージを受け取った場合、受け入れられた回答への追加として

MyNamespace.MyClass<T>' does not implement interface
  member 'System.Collections.IEnumerable.GetEnumerator()'.
  'WindowsFormsApplication1.SomeClass<T>.GetEnumerator()' cannot implement
  'System.Collections.IEnumerable.GetEnumerator()' because it does not have
  the matching return type of 'System.Collections.IEnumerator'.

追加の GetEnumerator()メソッドを実装する必要があります:

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
    return GetEnumerator();
}

IEnumerable&lt; T&gt; IEnumerable を実装しているため、 GetEnumerator()の両方の形式を実装する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top