Jas*_*son 4 c# ienumerable ienumerator iterator
致力于实现IEnumerable界面.我实际上发现了两种需要实现的方法:
public IEnumerator<Item> GetEnumerator()
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
Run Code Online (Sandbox Code Playgroud)
不知道为什么我需要实现这两个方法(看起来非常相似).有谁可以向我解释一下?
Ser*_*rvy 10
IEnumerable<T>扩展IEnumerable,因此您需要提供该方法的通用和非泛型版本.
一个常见的解决方案是让非通用解决方案简单地调用通用解决方案,因为IEnumerator<T>也扩展了IEnumerator.
部分答案是"出于历史原因".
该IEnumerable接口已经出现自.NET 1.1,而仿制药(因此IEnumerable<T>)在.NET 2.添加 IEnumerable<T>扩展IEnumerable,这是一个明智的决定,因为它可以让你使用IEnumerable<T>在已经写入采取代码IEnumerable.
但这意味着要实现IEnumerable<T>(包括IEnumerator<T> GetEnumerator()方法),您还必须实现IEnumerable(包括IEnumerator GetEnumerator()方法).
正如Servy所说,这并不是什么大不了的事,因为你可以这样做:
IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); }
Run Code Online (Sandbox Code Playgroud)
其中非显式实现GetEnumerator是返回类型的实现IEnumerator<T>.