为什么.net中的数组只实现IEnumerable而不实现IEnumerable?
我正在实现自己的 ArrayList 类,当我意识到这
public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
return _array.GetEnumerator();
}
不起作用时,我感到很惊讶。数组没有在 .NET 中实现 IEnumerator 的原因是什么?
有什么解决办法吗?
谢谢
I was implementing my own ArrayList class and was left surprised when I realised that
public System.Collections.Generic.IEnumerator<T> GetEnumerator() {
return _array.GetEnumerator();
}
didn't work. What is the reason arrays don't implement IEnumerator in .NET?
Is there any work-around?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
数组确实实现了
IEnumerable
,但它是作为 CLI 对数组的特殊知识的一部分而完成的。这就像一个显式实现一样工作(但不是:它是在运行时完成的)。许多工具不会显示此实现,这在 Array 类概述的“noreferrer">备注部分。您可以添加强制转换:
注意,旧版 MSDN(pre learn.microsoft.com)对此的报道因不同的 .NET 版本而发生了几次变化,请检查 备注 部分。
Arrays do implement
IEnumerable<T>
, but it is done as part of the special knowledge the CLI has for arrays. This works as if it were an explicit implementation (but isn't: it is done at runtime). Many tools will not show this implementation, this is described in the Remarks section of theArray
class overview.You could add a cast:
Note, older MSDN (pre learn.microsoft.com) coverage of this changed a few times with different .NET versions, check for the remarks section.
您可以使用通用方法;集合。如果您使用
IEnumerable;来自 System.Linq 命名空间的 OfType()
,它扩展了 IEnumerable 接口。它将过滤掉所有类型与 T 不同的元素并返回 IEnumerable(IEnumerable)_array
转换运算符,则可能不安全,因为System.Array
(和其他非泛型类型)存储类型的项系统.对象
。You can use generic method
IEnumerable<T> OfType<T>()
from System.Linq namespace, which extends IEnumerable interface. It will filter out all elements which type is different than T and returnIEnumerable<T> collection
. If you use(IEnumerable<T>)_array
conversion operator, it might not be safe, becauseSystem.Array
(and other nongeneric types) stores items of typeSystem.Object
.