【发布时间】:2019-06-06 03:47:35
【问题描述】:
如果我只想使用通用版本的IEnumerable,我不仅要实现IEnumerator<T> GetEnumerator()还要实现IEnumerator GetEnumerator(),后者似乎是多余的
【问题讨论】:
-
我通过在谷歌中搜索
why IEnumerable<T> needs to implement IEnumerable找到了副本
如果我只想使用通用版本的IEnumerable,我不仅要实现IEnumerator<T> GetEnumerator()还要实现IEnumerator GetEnumerator(),后者似乎是多余的
【问题讨论】:
why IEnumerable<T> needs to implement IEnumerable找到了副本
IEnumerable 接口是在 1.1 .net 框架中引入的。
但通用版本 IEnumerable<T> 仅在 2.0 中(带有泛型)。所以,它是向后兼容的。有遗留代码,只接受IEnumerable:
void Method(IEnumerable list)
{
foreach(var item in list)
{
Console.WriteLine(item);
}
}
所以如果IEnumerable<T>没有实现IEnumerable,比如在这个方法中就不能传递List<int>。
【讨论】:
基本上有两个原因:
IEnumerable,但不能处理IEnumerable<T>。是的,现代 API 被设计为使用泛型,但有时我们需要使用旧版 API。IEnumerable 在这里可以。数据绑定是最明显的一种。【讨论】: