C# 如何实现IEnumerable<;T>;是否使用GetEnumerator()?

C# 如何实现IEnumerable<;T>;是否使用GetEnumerator()?,c#,ienumerable,C#,Ienumerable,我希望我的类型实现IEnumerable。简言之,我试图追随C#,但出现了一些问题: public class Simulation : IEnumerable<string> { private IEnumerable<string> Events() { yield return "a"; yield return "b"; } public IEnumerator<string> GetE

我希望我的类型实现
IEnumerable
。简言之,我试图追随C#,但出现了一些问题:

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

    public IEnumerator<string> GetEnumerator()
    {
        return Events().GetEnumerator();
    }
}
公共类模拟:IEnumerable
{
私有IEnumerable事件()
{
收益率回报率“a”;
收益率回报率“b”;
}
公共IEnumerator GetEnumerator()
{
返回事件().GetEnumerator();
}
}
但是我得到了构建错误

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


您缺少
IEnumerator IEnumerable.GetEnumerator()

公共类模拟:IEnumerable
{
私有IEnumerable事件()
{
收益率回报率“a”;
收益率回报率“b”;
}
公共IEnumerator GetEnumerator()
{
返回事件().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
返回GetEnumerator();
}
}

IEnumerable要求实现类型化方法和泛型方法


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

有一个问题,但是@NominSim在下面的帖子中回答了这个问题-没关系!谢谢,现在我可以把它添加到我的EF TT文件中;-)仅供参考,让Visual Studio为您键入此内容。键入
public class Simulation:IEnumerable
时,右键单击
IEnumerable
部分,然后转到实现接口>实现接口。Visual Studio将填充界面中尚未填充的部分。旁白:您可以直接从内部
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();
    }
}