【问题标题】:why IEnumerable<T> needs to implement IEnumerable [duplicate]为什么 IEnumerable<T> 需要实现 IEnumerable [重复]
【发布时间】:2019-06-06 03:47:35
【问题描述】:

如果我只想使用通用版本的IEnumerable,我不仅要实现IEnumerator&lt;T&gt; GetEnumerator()还要实现IEnumerator GetEnumerator(),后者似乎是多余的

【问题讨论】:

  • 我通过在谷歌中搜索why IEnumerable&lt;T&gt; needs to implement IEnumerable找到了副本

标签: c# oop


【解决方案1】:

IEnumerable 接口是在 1.1 .net 框架中引入的。 但通用版本 IEnumerable&lt;T&gt; 仅在 2.0 中(带有泛型)。所以,它是向后兼容的。有遗留代码,只接受IEnumerable:

void Method(IEnumerable list)
{
    foreach(var item in list)
    {
        Console.WriteLine(item);
    }
}

所以如果IEnumerable&lt;T&gt;没有实现IEnumerable,比如在这个方法中就不能传递List&lt;int&gt;

【讨论】:

    【解决方案2】:

    基本上有两个原因:

    • 兼容性。很多遗留代码,可以处理IEnumerable,但不能处理IEnumerable&lt;T&gt;。是的,现代 API 被设计为使用泛型,但有时我们需要使用旧版 API。
    • 在某些情况下,您想枚举,但在设计时不关心对象类型或装箱。 IEnumerable 在这里可以。数据绑定是最明显的一种。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 2011-04-04
      • 2014-11-17
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多