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.IEnumerable.GetEnumerator()”,因为它没有匹配的返回类型“System.Collections.IEnumerator”。

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 回答