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

Col*_*nic 17 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我得到了构建错误

错误1'EventSimulator.Simulation'未实现接口成员'System.Collections.IEnumerable.GetEnumerator()'.'EventSimulator.Simulation.GetEnumerator()'无法实现'System.Collections.IEnumerable.GetEnumerator()',因为它没有匹配的返回类型'System.Collections.IEnumerator'.

Fil*_*erg 35

你错过了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();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,让 Visual Studio 为您输入此内容。当您输入“public class Simulation : IEnumerable&lt;string&gt;”时,右键单击“IEnumerable”部分,然后转到“实现接口”&gt;“实现接口”。Visual Studio 将填充您尚未填充的界面部分。 (2认同)

Nom*_*Sim 6

IEnumerable要求您同时实现类型化和通用方法。

在msdn 文档的“社区”部分中,说明了为什么您同时需要两者。(出于向后兼容性的原因,本质上给出了原因)。