IEnumerable接口的方法在哪里为MSDN的内置类实现?

时间:2017-10-22 12:57:00

标签: c#

我一直在MSDN中搜索,试图查看一个实现IEnumerator方法的类。例如,ArrayList类。是否可以可视化实现IEnumerator接口的辅助类,以便IEnumerable接口的GetEnumerator()能够返回此类的实例并且foreach功能可用? 我意识到这没有实际用途。这只适用于“学术”的教师,以便更好地理解语言的开发人员如何构建它。

1 个答案:

答案 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>