如何使用GetEnumerator()实现IEnumerable <t>?</t>

时间:2012-07-03 14:43:20

标签: c# ienumerable

我希望我的类型能够实现IEnumerable<string>。我试图在Nutshell中关注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.IEnumerable.GetEnumerator()',因为它没有匹配的返回类型'System.Collections.IEnumerator'。

2 个答案:

答案 0 :(得分:34)

你错过了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();
    }
}

答案 1 :(得分:5)

IEnumerable要求您实现typed和generic方法。

在msdn docs的社区部分,它解释了为什么你需要两者。 (为了向后兼容是基本上给出的原因)。