【问题标题】:How to implement IEnumerable<T> with GetEnumerator()? [duplicate]如何使用 GetEnumerator() 实现 IEnumerable<T>? [复制]
【发布时间】:2012-07-03 14:43:19
【问题描述】:

我希望我的类型实现 IEnumerable&lt;string&gt; 。我试图简单地遵循 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'。

【问题讨论】:

  • 旁白:你可以直接从GetEnumerator()内部yield returnGetEnumerator()

标签: c# ienumerable


【解决方案1】:

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

【讨论】:

  • 有一个问题,但@NominSim 在下面的帖子中回答了 - 没关系!
  • 谢谢,现在我可以将它添加到我的 EF TT 文件中;-)
  • 仅供参考,让 Visual Studio 为您输入。当您键入public class Simulation : IEnumerable&lt;string&gt; 时,右键单击IEnumerable 部分并转到实现接口> 实现接口。 Visual Studio 将填写界面中您尚未填写的部分。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-25
    • 2014-12-04
    • 2012-07-03
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多