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 效率和开销 的相关文章

  • 使用 POST 的 HttpWebRequest 的性能

    我有一个用于测试网络服务的小工具 它可以使用 POST 或 GET 调用 Web 服务 使用POST的代码是 public void PerformRequest WebRequest webRequest WebRequest Creat
  • 如何使用T4从一个模板同时生成两个文件?

    我遇到的情况是 我需要生成两个 CSharp 代码文件 它们的代码几乎相同 但方法的输入和输出类型的命名空间不同 事实上 每个文件都针对特定国家 地区 并且类型来自特定国家 地区的 WSDL 我正在围绕服务编写一些包装器 逻辑完全相同 但从
  • 如何从经过身份验证的 SecurityToken 中获取声明

    我将令牌作为字符串传递到 SOAP 服务中 并验证了该令牌是否有效 我现在有一个 SecurityToken 在调试模式下我可以看到所有声明 特别是我想传递到另一个方法的 userId 声明 我似乎不知道如何获得这些索赔 现在 我解码了令牌
  • C++中类成员函数相互调用有什么好处?

    我是 C 新手 我发现下面的编程风格对我来说很有趣 我在这里写了一个简化版本 include
  • CMake(Ninja 后端)使用 /MT 编译

    我有一个类似的问题CMake 使用 MT 而不是 MD 进行编译 https stackoverflow com questions 14172856 cmake compile with mt instead of md但有一些差异 我正
  • 如何以编程方式删除受信任的根证书颁发机构中的证书?

    我需要能够从组织中的每台电脑中删除特定的证书 是的 我可以逐个座位 但我要到周四才能完成 而且我没有人力逐个座位 是否有使用 C 的编程方式来执行此操作 我认为你不需要编写任何 C 看看certmgr exe del http msdn m
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • 维护 VS Test Project 中单元测试方法之间的上下文

    我想按顺序运行以下单元测试 使用随机数字的名称 密码等创建新客户 检索刚刚创建的客户并断言其属性包含相同的随机数 对同一用户调用 ForgotPassword 函数 并使用相同的随机数作为用户名 清楚地看到 我需要生成一次随机数 并在 3
  • 从图像创建半透明光标

    是否可以从图像创建光标并使其半透明 我目前正在拍摄自定义图像并覆盖鼠标光标图像 如果我可以将其设为半透明 那就太好了 但不是必需的 销售人员喜欢闪亮的 目前正在做这样的事情 Image cursorImage customImage Get
  • ASP.NET - Crystal Report Viewer 打印按钮在 ASP.NET 中不起作用

    我正在使用 Visual Studio 2008 但我遇到了水晶报告问题 当我单击打印按钮时 它会将我带到弹出窗口 但未找到页面 弹出的网址是 http localhost aspnet client System Web 2 0 5072
  • 使用任一默认捕获模式时,这是通过复制捕获还是 (*this) 通过引用捕获?是一样的吗?

    当我看到以下工作时我有点困惑 struct A void g void f g 但后来我发现this https stackoverflow com a 16323119 5825294答案非常详细地解释了它是如何工作的 本质上 它归结为t
  • 如何在Windows窗体中打开进程

    我想在我的 Windows 窗体应用程序中打开进程 例如 我希望当用户按下 Windows 窗体容器之一中的按钮时 mstsc exe 将打开 如果他按下按钮 它将在另一个容器上打开 IE DllImport user32 dll SetL
  • 当列表中不存在 X 时,从列表中查找大于 X 的值

    我试图从列表中查找大于特定值 在我的情况下已知 的值 Example Given list 1 2 5 10 15 list is sorted 查找大于的值X 7在这种情况下 期望的结果 返回一个包含值的列表 10 15 我尝试使用jav
  • C++网络序列化[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种将 C 数据包序列化为网络流的解决方案 我在这里看到很多帖子提到人们 ACE 谷歌协议缓
  • 在一个解决方案中调用不同项目的方法

    1 个解决方案中有 3 个项目 我对第一个项目中的主文件进行的主要操作 但是我需要调用第三个项目中的方法并使用类 例如 第三个项目有 public DataClasses1DataContext base global WindowsFor
  • 使用未命名命名空间而不是静态命名空间

    我可以假设在未命名命名空间中声明的对象相当于static namespace int x 1 static int x 2 FWIK 在这两种情况下 x将具有静态存储期限和内部链接 声明为的对象的所有规则也是如此static适用于未命名名称
  • 让 Windows 尝试读取文件

    我正在对 Windows 文件系统进行某种封装 当用户请求打开文件时 Windows 调用我的驱动程序来提供数据 在正常操作中 驱动程序返回缓存的文件内容 但是 在某些情况下 实际文件没有缓存 我需要从网络下载它 问题是是否有可能让 Win
  • 查找数组中的多个索引

    假设我有一个像这样的数组 string fruits watermelon apple apple kiwi pear banana 是否有一个内置函数可以让我查询 apple 的所有索引 例如 fruits FindAllIndex ap
  • 在多线程环境中捕获信号

    我有一个大型程序 需要尽可能具有弹性 并且有大量线程 我需要捕获所有信号SIGBUS SIGSEGV 并在必要时重新初始化有问题的线程 或者禁用该线程以继续减少功能 我的第一个想法是做一个setjump 然后设置信号处理程序 可以记录问题

随机推荐

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

    我的 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 是否使