C# List .ConvertAll 效率和开销

2024-01-10

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


没有比直接访问源代码更好的方法来找出答案了:)

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

正如您所看到的,没有发生任何特殊的魔法。它只是迭代列表并通过您指定的转换器函数创建一个新项目。

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# List .ConvertAll 效率和开销 的相关文章

  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 用于选择特定 div 中具有特定类的锚元素的 jQuery 选择器是什么

    我有一些这样的代码 我想选择每个 a 带有类的标签status在 div 中foo div a class status a div 你可以这样做 foo find status a
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 删除每列(和相应行)中的异常值

    我的 Numpy 数组包含 10 列和大约 200 万行 现在我需要分别分析每一列 找到异常值 并从数组中删除整个相应行 所以我开始分析第 0 列 查找第 10 20 100 行的异常值 并删除这些行 接下来 我将开始分析现已修剪的数组中的
  • 如何在 Haskell 中编写恒定空间长度函数?

    规范的实现length a gt Int is length 0 length x xs 1 length xs 它非常漂亮 但由于使用线性空间而受到堆栈溢出的影响 尾递归版本 length xs length xs 0 where len
  • 如何在新的 Azure 门户(预览版)上向我的 VM 添加新终结点?

    如何在新的 Azure 门户 预览版 上向我的 VM 添加新终结点 在旧门户上 这很容易 并且有一个选项卡 但在新门户上 我找不到它 您可以在网络安全组部分找到它
  • R 中 setdiff() 函数的意外行为

    据我了解 setdiff 比较两个向量并给出一个向量中出现但另一向量中未出现的元素 如果是这样 那么给定这些向量 thing1 lt c 1 2 3 thing2 lt c 2 3 4 thing3 lt c 1 2 3 这是我的结果 se
  • 逻辑常量与物理常量之间的差异

    这两个术语有什么区别 为什么我需要mutable 物理 常量来自声明一个对象const 并且原则上可以通过将对象放置在只读存储器中来强制执行 因此它不能更改 尝试改变它会导致未定义的行为 它可能会改变 也可能不会 或者可能会触发保护故障 或
  • std::绑定到std::函数?

    我使用这个得到一个编译错误 std vector
  • JSON结果转字符串

    我有一个JsonResult工作正常 并从一些 POCO 返回 JSON 我想将 JSON 作为字符串保存在数据库中 public JsonResult GetJSON JsonResult json new JsonResult Data
  • Eclipse 如何在 Linux 中找到 JDK?

    我已经手动安装了Eclipse和jdk 我的 JAVA HOME 已设置 我可以运行java版本 and javac 版本命令 但是当我尝试运行 Eclipse 时 它 显示以下消息 A Java Runtime Environment J
  • 使用“输入”事件动态更改背景颜色

    我正在尝试使用 JavaScript 动态更改背景 使用事件监听器监听输入类型 颜色 字段上的 输入 当我从调色板中选择颜色后单击颜色输入字段时 背景颜色会正确更改 但是 我希望背景在用户滚动托盘时动态变化 而不仅仅是在他选择最终颜色时 希
  • 包含嵌入/发布的 Google 文档的 Iframe 的自动高度

    我有一个带有已发布的 Google 文档的 iframe 该文档的内容可能会发生变化 因此我想根据其内容自动调整 iframe 的高度 我找到了一些解决方案 但它们都需要访问子文档的头部 有谁知道如何做到这一点 您可以查看下面我使用的代码的
  • 在 Eclipse 中使用三星 Galaxy 5 作为设备

    我无法在 Eclipse 中使用我的 Samsung Galaxy 5 例如 将 s5 连接到我的计算机时 我无法调试我的应用程序 我在 设备 中看到该设备 但其未知或处于离线状态 我已经在开发者选项中激活了调试模式 它适用于三星 Gala
  • 用于修复损坏的序列化 PHP 数据的正则表达式/代码。

    我有一个巨大的多维数组 已由 PHP 序列化 它已存储在MySQL中 数据字段不够大 末尾已被切断 我需要提取数据 unserialize行不通 有人知道可以关闭所有数组的代码 重新计算字符串长度 手动处理的数据太多了 非常感谢 这是重新计
  • 附加到 asp.net 母版页中的默认标题

    我正在使用 MVC 将标题添加到带有内容占位符的母版页 默认的MVC母版页模板使用以下代码 当我尝试将默认文本添加到内容容器的前面时 它不会在最终呈现的页面中显示文本 我试图让页面显示带有附加 contentp
  • Jquery 滚动到具有相同类的下一个/上一个 div

    我有几个 div 都具有相同的类 帖子 并且我有一个简单的向上和向下导航
  • Python浮点精度和

    我在 python 中有以下数组 n 565387674 45 321772103 48 321772103 48 214514735 66 214514735 65 357524559 41 如果我将所有这些元素相加 我会得到 sum n
  • 使用shutil移动文件时出错

    我正在尝试创建一个简单的函数 查找以某个字符串开头的文件 然后将它们移动到新目录 但我不断从shutil IOError Errno 2 没有这样的文件或目录 18 1 pdf 即使该文件存在 import os import shutil
  • 组件中未定义渲染函数或模板:匿名

    我遇到这样的问题 重新加载页面后出现错误 组件中未定义渲染函数或模板 匿名 我认为该错误是由于 socket io 造成的 这个错误不是发生在本地机器上 而是发生在生产上 这是怎么回事 开发者 https dev jujuway com u
  • 如何在Python中编写字符串文字而不必转义它们?

    有没有一种方法可以在Python中声明一个字符串变量 这样它里面的所有内容都会自动转义 或者有它的文字字符值 I m not询问如何用斜杠转义引号 这是显而易见的 我要求的是一种通用的方法 用于将所有内容都放入字符串文字中 这样我就不必手动
  • 在查询中使用 TOP 1 时出现问题

    我编写了以下查询来获取日期 删除它的时间部分并添加我想要的时间 如果我在没有 TOP 子句的情况下运行此查询 则效果很好 但是当我添加它时 它返回以下异常 从字符串转换日期和 或时间时转换失败 这是查询 SELECT TOP 1 CONVE
  • C# List .ConvertAll 效率和开销

    我最近了解了 List 的 ConvertAll 扩展 我今天在工作中在代码中使用了几次它 将我的大量对象列表转换为其他对象的列表 看起来效果真的很好 但是 我不确定与仅迭代列表和转换对象相比 这有多高效或多快 ConvertAll 是否使