为什么.net中的数组只能实现IEnumerable而不是IEnumerable <T>?
我正在实现自己的ArrayList类,当我意识到这一点时,感到很惊讶
public System.Collections.Generic.IEnumerator<T> GetEnumerator() { return _array.GetEnumerator(); }
没有工作。 什么原因数组不在IE中实现IEnumerator?
有没有解决办法?
谢谢
数组确实实现了IEnumerable<T>
,但它是CLI为数组提供的特殊知识的一部分。 许多工具不会显示这个实现。 请参阅文档 (以前的.NET版本的文档:查找“重要”块)中的“从.NET Framework 2.0开始”注释中的段落。
你可以添加一个演员:
return ((IEnumerable<T>)_array).GetEnumerator();
您可以使用扩展IEnumerable接口的System.Linq命名空间的generics方法IEnumerable<T> OfType<T>()
。 它将过滤掉所有types不同于T的元素,并返回IEnumerable<T> collection
。 如果使用(IEnumerable<T>)_array
转换运算符,则可能不安全,因为System.Array
(和其他非genericstypes)存储System.Object
types的项目。