为什么IEnumerable <T>需要实现IEnumerable

时间:2019-06-06 03:47:35

标签: c# oop

如果我只想使用IEnumerable通用版本,则不仅要实现IEnumerator<T> GetEnumerator(),还必须实现IEnumerator GetEnumerator(),后者似乎是多余的

2 个答案:

答案 0 :(得分:2)

IEnumerable接口在1.1 .net框架中引入。 但仅适用于2.0中的通用版本IEnumerable<T>(带有通用)。因此,它是向后兼容。有旧版代码,仅接受IEnumerable

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

因此,例如,如果IEnumerable<T>未实现IEnumerable,则无法使用此方法传递List<int>

答案 1 :(得分:2)

基本上,有两个原因:

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