为什么.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.Objecttypes的项目。