gpt4 book ai didi

C# List .ConvertAll 效率和开销

转载 作者:太空狗 更新时间:2023-10-29 22:19:01 24 4
gpt4 key购买 nike

我最近了解了 List 的 .ConvertAll 扩展。我今天在工作中的代码中使用了几次它,将我的大量对象列表转换为其他一些对象的列表。它似乎工作得很好。但是,我不确定与仅迭代列表和转换对象相比,这有多高效或多快。 .ConvertAll 是否使用任何特殊的东西来加速转换过程,或者它只是一种无需设置循环即可转换列表的快捷方式?

最佳答案

没有比直接访问源代码更好的查找方法了:)

http://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs#dbcc8a668882c0db

如您所见,并没有发生什么特别的魔法。它只是遍历列表并通过您指定的转换器函数创建一个新项目。

老实说,我并不知道这个方法。进行这种投影的更惯用的 .NET 方法是使用 SelectIEnumerable<T> 上的扩展方法像这样:source.Select(input => new Something(input.Name)) .这样做的好处有三:

  • 正如我所说,它更像我所说的,ConvertAll很可能是 C#3.0 之前时代的残余。无论如何,这都不是一个非常神秘的方法,而且 ConvertAll是一个非常清晰的描述,但坚持其他人所知道的可能会更好,即 Select .
  • 所有 可用IEnumerable<T> , 而 ConvertAll仅适用于 List<T> 的实例.不管是数组、列表还是字典,Select与他们所有人一起工作。
  • Select很懒惰。在您对其进行迭代之前,它不会执行任何操作。这意味着它返回一个 IEnumerable<TOutput>然后您可以通过调用 ToList() 将其转换为列表或者如果您实际上并不需要列表。或者,如果您只想转换和检索一百万项列表中的前两项,您可以简单地执行 source.Select(input => new Something(input.Name)).Take(2)。 .

但如果您的问题纯粹是关于将整个列表转换为另一个列表的性能,那么 ConvertAll可能会快一些,因为它不如 Select 通用其次是 ToList (它知道列表有一个大小,并且可以通过索引从底层数组直接访问元素)。

关于C# List .ConvertAll 效率和开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23439049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com