我一直在MSDN中搜索,试图查看一个实现IEnumerator方法的类。例如,ArrayList类。是否可以可视化实现IEnumerator接口的辅助类,以便IEnumerable接口的GetEnumerator()能够返回此类的实例并且foreach功能可用? 我意识到这没有实际用途。这只适用于“学术”的教师,以便更好地理解语言的开发人员如何构建它。
答案 0 :(得分:0)
ArrayList
被认为是平台不可或缺的一部分,因此您可能不一定会在您认为的位置找到它。 (它也是过时的,你应该更喜欢像List<T>
这样的通用集合。)例如,在.NET中,它没有在集合解决方案中定义,而是在mscorlib
中定义在{{ 3}}。 mscorlib/system/collections/arraylist.cs
基本上只是一行:
return new ArrayListEnumeratorSimple(this);
还有definition of GetEnumerator
,它基本上也只是一行:
return new ArrayListEnumerator(this, index, count);
an overload which iterates over a sublist再次相当简单,如果你去掉参数验证等等,它基本上只是:
public bool MoveNext() {
if (index < endIndex) {
currentElement = list[++index];
return true;
}
else {
index = endIndex + 1;
}
return false;
}
public Object Current => currentElement;
definition of ArrayListEnumerator
具有讽刺意味的是更为复杂,但仍然基本相同。
请注意,.NET源代码非常陈旧,而ArrayList
是其中最古老的类之一。
对于更现代的视角,您可以查看definition of ArrayListEnumeratorSimple
,但除了更现代的编码风格,以及使用哨兵值而不是null
时,它完全相同。 / p>