繁体   English   中英

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

[英]Where are the methods from the IEnumerable interface implemented for built in classes of the MSDN?

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

ArrayList被认为是平台的一个组成部分,因此您可能不一定会在您认为它应该出现的地方找到它。 (它也已过时,您应该更喜欢List<T>类的泛型集合。)例如,在 .NET 中,它没有在集合解决方案中定义,而是在mscorlib ,在mscorlib/system/collections/arraylist.cs GetEnumerator定义本质上只是一行:

return new ArrayListEnumeratorSimple(this);

还有一个重载迭代 sublist ,它本质上又是一行:

return new ArrayListEnumerator(this, index, count);

ArrayListEnumerator定义再次相当简单,如果去掉参数验证等,它基本上就是:

public bool MoveNext() {
    if (index < endIndex) {
        currentElement = list[++index];
        return true;
    }
    else {
        index = endIndex + 1;
    }

    return false;
}

public Object Current => currentElement;

具有讽刺意味的是ArrayListEnumeratorSimple定义更复杂,但本质上仍然相同。

请注意,.NET 源代码相当古老,而ArrayList是其中最古老的类之一。

对于更现代的观点,您可以src/System.Runtime.Extensions/src/System/Collections/ArrayList.cs查看CoreFX 的实现,但除了更现代的编码风格,以及使用哨兵值而不是null ,完全一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM