致力于实施IEnumerable
接口。
我实际上找到了两种需要实现的方法:
public IEnumerator<Item> GetEnumerator()
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
不确定为什么我需要实现这两种方法(看起来非常相似)。有人能解释一下吗?
答案 0 :(得分:10)
IEnumerable<T>
扩展IEnumerable
,因此您需要同时提供该方法的通用版本和非泛型版本。
一个常见的解决方案是让非通用解决方案简单地调用通用解决方案,因为IEnumerator<T>
也扩展了IEnumerator
。
答案 1 :(得分:6)
部分答案是“出于历史原因”。
自.NET 1.1以来,IEnumerable
接口已经存在,而在.NET 2中添加了泛型(因此IEnumerable<T>
)。IEnumerable<T>
扩展了IEnumerable
,这是这是一个明智的决定,因为它允许您在已编写的代码中使用IEnumerable<T>
来获取IEnumerable
。
但这意味着要实施IEnumerable<T>
(包括IEnumerator<T> GetEnumerator()
方法),您还必须实施IEnumerable
(包括IEnumerator GetEnumerator()
方法)。
正如Servy所说,这并不是什么大不了的事,因为你可以这样做:
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
其中非显式实现GetEnumerator
是返回类型为IEnumerator<T>
的实现。