50

我正在实现自己的 ArrayList 类,当我意识到

public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
    return _array.GetEnumerator();
}

没用。数组没有在 .NET 中实现 IEnumerator 的原因是什么?

有什么解决方法吗?

谢谢

4

2 回答 2

68

数组确实实现IEnumerable<T>了 ,但它是作为 CLI 对数组的特殊知识的一部分来完成的。这就像它是一个显式实现一样工作(但不是:它是在运行时完成的)。许多工具不会显示此实现,这在类概述的备注部分中进行了描述。Array

您可以添加演员表:

return ((IEnumerable<T>)_array).GetEnumerator();

请注意,旧的 MSDN (pre docs.microsoft.com) 对此的报道随着不同的 .NET 版本而改变了几次,请检查备注部分。

于 2010-05-05T13:51:23.857 回答
-1

您可以使用IEnumerable<T> OfType<T>()System.Linq 命名空间中的泛型方法,它扩展了 IEnumerable 接口。它将过滤掉所有类型与 T 不同的元素并返回IEnumerable<T> collection。如果您使用(IEnumerable<T>)_array转换运算符,它可能不安全,因为System.Array(和其他非泛型类型)存储类型为 的项目System.Object

于 2016-05-07T08:05:57.943 回答