为什么.net中的数组只实现IEnumerable而不实现IEnumerable

发布于 2024-08-31 02:16:35 字数 255 浏览 2 评论 0原文

我正在实现自己的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

筑梦 2024-09-07 02:16:35

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

您可以添加强制转换:

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

注意,旧版 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 the Array class overview.

You could add a cast:

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

Note, older MSDN (pre learn.microsoft.com) coverage of this changed a few times with different .NET versions, check for the remarks section.

半枫 2024-09-07 02:16:35

您可以使用通用方法 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 return IEnumerable<T> collection. If you use (IEnumerable<T>)_array conversion operator, it might not be safe, because System.Array (and other nongeneric types) stores items of type System.Object.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文