将 IEnumerable转换为快速方法是什么?列出在 C# 2.0 中?

发布于 2024-08-11 21:38:51 字数 53 浏览 3 评论 0原文

我们都知道慢速方式:

foreach..

we all know the slow way:

foreach..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(3

追星践月 2024-08-18 21:38:51

列表构造函数是一个不错的选择

IEnumerable<T> enumerable = ...;
List<T> list = new List<T>(enumerable);

The List constructor is a good bet.

IEnumerable<T> enumerable = ...;
List<T> list = new List<T>(enumerable);
注定孤独终老 2024-08-18 21:38:51

怎么样:

IEnumerable<T> sequence = GetSequenceFromSomewhere();
List<T> list = new List<T>(sequence);

请注意,这是针对序列恰好是 IList 的情况进行了优化 - 然后它使用 IList.CopyTo。在大多数情况下,它仍然是 O(n),但可能比迭代快得多:)(它还避免了创建大小时的任何调整大小。)

How about:

IEnumerable<T> sequence = GetSequenceFromSomewhere();
List<T> list = new List<T>(sequence);

Note that this is optimised for the situation where the sequence happens to be an IList<T> - it then uses IList<T>.CopyTo. It'll still be O(n) in most situations, but potentially a much faster O(n) than iterating :) (It also avoids any resizing as it creates it.)

断念 2024-08-18 21:38:51

您想在通用列表上使用 .AddRange 方法。

List<string> strings = new List<string>();
strings.AddRange(...);

..或构造函数..

new List<string>(...);

You want to use the .AddRange method on generic List.

List<string> strings = new List<string>();
strings.AddRange(...);

.. or the constructor ..

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