我正在实现自己的ArrayList类,当我意识到
时,我感到很惊讶public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
return _array.GetEnumerator();
}
没用。数组在.NET中不实现IEnumerator的原因是什么?
有没有解决办法?
由于
答案 0 :(得分:59)
Arrays确实实现了IEnumerable<T>
,但它是作为CLI对数组的特殊知识的一部分完成的。这就好像它是一个显式实现(但不是:它在运行时完成)。许多工具都不会显示此实现,Array
类概述的Remarks部分对此进行了描述。
您可以添加演员:
return ((IEnumerable<T>)_array).GetEnumerator();
请注意,较旧的MSDN(pre docs.microsoft.com)对此版本的报道在不同的.NET版本中发生了几次更改,请检查remarks部分。
答案 1 :(得分:-1)
您可以使用System.Linq命名空间中的泛型方法IEnumerable<T> OfType<T>()
,它扩展了IEnumerable接口。它将过滤掉所有类型不同于T的元素并返回IEnumerable<T> collection
。如果您使用(IEnumerable<T>)_array
转化运算符,则可能不安全,因为System.Array
(和其他非通用类型)存储System.Object
类型的项。