20

私のタイプを実装したいと思いますIEnumerable<string>。私は一言で言えばC#に従おうとしましたが、何かがうまくいきませんでした:

public class Simulation : IEnumerable<string>
{
    private IEnumerable<string> Events()
    {
        yield return "a";
        yield return "b";
    }

    public IEnumerator<string> GetEnumerator()
    {
        return Events().GetEnumerator();
    }
}

しかし、ビルドエラーが発生します

エラー 1 'EventSimulator.Simulation' はインターフェイス メンバー 'System.Collections.IEnumerable.GetEnumerator()' を実装していません。'EventSimulator.Simulation.GetEnumerator()' は、'System.Collections.IEnumerator' の一致する戻り値の型を持たないため、'System.Collections.IEnumerable.GetEnumerator()' を実装できません。

4

2 に答える 2

40

あなたが行方不明ですIEnumerator IEnumerable.GetEnumerator()

public class Simulation : IEnumerable<string>
{
    private IEnumerable<string> Events()
    {
        yield return "a";
        yield return "b";
    }

    public IEnumerator<string> GetEnumerator()
    {
        return Events().GetEnumerator();
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}
于 2012-07-03T14:44:50.663 に答える
6

IEnumerable では、型付きメソッドとジェネリック メソッドの両方を実装する必要があります。

msdnドキュメントのコミュニティ セクションでは、なぜ両方が必要なのかを説明しています。(下位互換性のため、本質的に与えられた理由です)。

于 2012-07-03T14:45:24.777 に答える