C# 为什么必须使用IEnumerator<;T>;是否实现GetEnumerator()和GetEnumerator()?
正在实施C# 为什么必须使用IEnumerator<;T>;是否实现GetEnumerator()和GetEnumerator()?,c#,iterator,ienumerable,ienumerator,C#,Iterator,Ienumerable,Ienumerator,正在实施IEnumerable接口。 实际上,我发现有两种方法需要实现: public IEnumerator<Item> GetEnumerator() System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() public IEnumerator GetEnumerator() System.Collections.IEnumerator System.Collections.IE
IEnumerable
接口。
实际上,我发现有两种方法需要实现:
public IEnumerator<Item> GetEnumerator()
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
public IEnumerator GetEnumerator()
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
不知道为什么我需要实现这两个方法(看起来很相似)。有人能给我解释一下吗?IEnumerable
扩展了IEnumerable
,因此您需要提供该方法的通用和非通用版本
一个常见的解决方案是让非泛型解决方案简单地称为泛型解决方案,因为IEnumerator
也扩展了IEnumerator
,部分答案是“出于历史原因”
IEnumerable
接口从.NET1.1开始就存在,而泛型(因此IEnumerable
)是在.NET2中添加的IEnumerable
扩展了IEnumerable
,这是一个明智的决定,因为它允许您在已编写的代码中使用IEnumerable
,以获取IEnumerable
但这意味着要实现IEnumerable
(包括IEnumerator GetEnumerator()
方法),还必须实现IEnumerable
(包括IEnumerator GetEnumerator()
方法)
正如Servy所指出的,这没什么大不了的,因为你可以这样做:
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
其中,非显式实现GetEnumerator
是返回类型为IEnumerator
的实现