首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C#中Select和ConvertAll的区别

C#中Select和ConvertAll的区别
EN

Stack Overflow用户
提问于 2009-10-15 03:35:17
回答 4查看 47.7K关注 0票数 150

我有一些清单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<int> list = new List<int> { 1, 2, 3, 4, 5 };

我想对列表中的元素应用一些转换。我可以通过两种方式完成此操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<int> list1 = list.Select(x => 2 * x).ToList();
List<int> list2 = list.ConvertAll(x => 2 * x).ToList();

这两种方式有什么不同?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-15 03:39:45

Select是一种LINQ扩展方法,适用于所有IEnumerable<T>对象,而ConvertAll仅由List<T>实现。ConvertAll方法从LINQ2.0开始就存在了,而.NET是在3.5版本中引入的。

你应该更喜欢Select而不是ConvertAll,因为它适用于任何类型的列表,但它们基本上做的是一样的。

票数 142
EN

Stack Overflow用户

发布于 2009-10-15 03:38:58

ConvertAll不是一个扩展,它是list类中的一个方法。你不必对结果调用ToList,因为它已经是一个列表了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
List<int> list2 = list.ConvertAll(x => 2 * x);

因此,不同之处在于ConvertAll方法只能用于列表,并且它返回一个列表。Select方法可用于任何实现IEnumerable<T>接口的集合,并返回一个IEnumerable<T>

此外,它们的处理方式也不同,因此它们在不同的情况下都有自己的优势。ConvertAll方法遍历列表并一次性创建一个新列表,而Select方法使用延迟执行,只在需要时处理项。如果您不需要所有的项,那么Select方法更有效。另一方面,一旦ConvertAll返回了列表,您就不需要保留原始列表。

票数 100
EN

Stack Overflow用户

发布于 2019-04-11 04:50:42

第一个答案不应该是被接受的答案。我是微软2007年的C#最有价值球员。

与接受的响应相比,ConvertAllSelectToList()的组合效率高得多。

首先,ConvertAll速度更快,并且使用最少的内存来完成此任务。与Array.ConvertAll和ToArray相同。对于长度较大的数组或循环中的多个调用,这一点会更加明显。

1) ConvertAll知道最终列表的大小,并避免重新分配基数组。ToList()会多次调整数组的大小。

2) ToList将进行较慢的接口IEnumerable<>调用,而ConvertAll将在底层数组中循环,而不需要额外的调用或范围检查。

3)选择将创建一个额外的IEnumerable<T>对象。

票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1571819

复制
相关文章
select * 和 select 所有字段的区别
之前发过的文章中,关于 select * 和 select 所有字段的知识,有描述不恰当,这次重新纠正下,加深下理解。
良月柒
2019/05/06
2.2K0
select * 和 select 所有字段的区别
之前发过的文章中,关于 select * 和 select 所有字段的知识,有描述不恰当,这次重新纠正下,加深下理解。
良月柒
2019/04/20
3K0
select * 和 select 所有字段的区别
select into from 和 insert into select 的用法和区别
select into from 和 insert into select都是用来复制表,两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建。insert into select from 要求目标表存在 下面分别介绍两者语法 一、INSERT INTO SELECT语句 1、语句形式为:
全栈程序员站长
2022/09/14
5.1K0
select for update和select for update wait和select for update nowait的区别
CREATE TABLE "TEST6" ( "ID" VARCHAR2(30), "NAME" VARCHAR2(30), "AGE" NUMBER(2,0), "SEX" VARCHAR2(2), "ENAME" VARCHAR2(30), "ADDTIME" DATE ) insert into TEST6 (id, name, age, sex, ename, addtime) values ('1', '张三', 18, null, 'zha
郑小超.
2018/01/26
2.4K0
C#中String和StringBuilder的区别
1.它是引用类型,在堆上分配内存 2.运算时会产生一个新的实例 3.String 对象一旦生成不可改变(Immutable) 4.定义相等运算符(== 和 !=)是为了比较 String 对象的值(而不是引用)
zls365
2021/10/19
1.9K0
c# 中for和foreach循环的区别
    (2)效率比for要高(C#是强类型检查,for循环对于数组访问的时候,要对索引的有效值进行检查)
vv彭
2020/10/27
4.9K0
c# 中for和foreach循环的区别
C#中Dispose和Close的区别!
当我们开发C#代码的时候,经常碰到一个问题,有些class提供Close(),有些class提供Dispose(),那么Dispose和Close到底有什么区别? 首先,Dispose和Close基本上应该是一样的。Close是为了那些不熟悉Dispose的开发者设计的。因为基本上所有的developer都知道Close是干吗的(特别是对于那些有C++背景的developer)。 但是当我们写code时候,如果要实现Close和Dispose的时候,要注意Close和Dispose的设计模式。.net的
菩提树下的杨过
2018/01/22
1.5K0
C#中new和override区别
在C#中实现重写方法,可以用new和override两个关键字来实现,究竟他们之间有什么区别呢?下面,我以例子来说明他们之间的微妙区别:
用户4766018
2022/08/19
2980
epoll、poll、select的原理和区别
epoll是一种I/O事件通知机制,是linux 内核实现IO多路复用的一个实现。IO多路复用是指,在一个操作里同时监听多个输入输出源,在其中一个或多个输入输出源可用的时候返回,然后对其的进行读写操作。 epoll有两种工作方式, LT-水平触发 和ET-边缘触发(默认工作方式),主要区别是: LT,内核通知你fd是否就绪,如果没有处理,则会持续通知。而ET,内核只通知一次。 什么是I/O? 输入输出(input/output)的对象可以是文件(file), 网络(socket),进程之间的管道(pipe)。在linux系统中,都用文件描述符(fd)来表示。 什么是事件? IO中涉及到的行为,建立连接、读操作、写操作等抽象出一个概念,就是事件,在jdk中用类SelectionKey.java来表示,例如:可读事件,当文件描述符关联的内核读缓冲区可读,则触发可读事件(可读:内核缓冲区非空,有数据可以读取);可写事件,当文件描述符关联的内核写缓冲区可写,则触发可写事件(可写:内核缓冲区不满,有空闲空间可以写入)。 什么是通知机制? 通知机制,就是当事件发生的时候,则主动通知。通知机制的反面,就是轮询机制。
全栈程序员站长
2022/11/15
9.1K0
epoll、poll、select的原理和区别
C# 中 Struct 和 Class 的区别总结
结构体(struct)是类(class)的轻量级版本。结构体是值类型,可用于创建行为类似于内置类型的对象。
zls365
2021/04/02
1.3K0
C#中数组、ArrayList和List的区别
在C#中,数组、ArrayList、List都能够存储一组对象,那么他们的区别是什么呢?
Karl Du
2023/10/20
3100
在C#中ParameterizedThreadStart和ThreadStart区别
不需要传递参数,也不需要返回参数     我们知道启动一个线程最直观的办法是使用Thread类,具体步骤如下:   ThreadStart threadStart=new ThreadStart(Calculate);  Thread thread=new Thread(threadStart);  thread.Start();       public void Calculate()      {   double Diameter=0.5;   Console.Write("The Area Of 
跟着阿笨一起玩NET
2018/09/18
1.3K0
在C#中ParameterizedThreadStart和ThreadStart区别
上面我们用定义了一个ThreadStart类型的委托 , 这个委托制定了线程需要执行的方法: Calculate,在这个方法里计算了一个直径为0.5的圆的周长,并输出.这就构成了最简单的多线程的例子,在很多情况下这就够用了,然后 ThreadStart这个委托定义为void ThreadStart(),也就是说,所执行的方法不能有参数,这显然是个很大的不足,为了弥补这个缺陷,聪明的程序员想出了许多好的方法,我们将在需 要传递多个参数一节中进行介绍,这里我们先介绍.Net为了解决这个问题而设定的另外一个委托:就是ParameterizedThreadStart
全栈程序员站长
2022/09/14
6640
C#中close(),flush()和dispose()区别 ?
Close()方法在这里就是关闭连接的意思,当我们使用完数据库或数据流的时候,就要用Close()方法把它们关闭,然后使用Dispose()方法进行释放,避免占用资源。但要注意,使用Close()方法仅仅只是关闭连接,资源并没有被释放。我们可以直接使用Dispose()方法,因为Dispose方法里面会判断当前连接是否关闭,如果没有关闭,就会调用Close()方法先关闭掉连接,然后再进行资源的释放。在using语句执行完毕之后,程序会自动调用Dispose()进行释放,不需要我们显式的调用Dispose()方法。
用户9127601
2022/11/28
1K0
SELECT INTO 和 INSERT INTO SELECT 两种表复制语句的区别
使用 SQL 进行数据复制的时候,会有 SELECT INTO 和 INSERT INTO SELECT 两种语句用法,下面简单罗列一下大概的区别:
Denis
2023/04/15
5720
ref和out的区别在c#中 总结
 ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。简单点说就是,使用了ref和out的效果就几乎和C中使用了指针变量一样。它能够让你直接对原数进行操作,而不是对那个原数的Copy进行操作。 还是以例子来说明吧; 1. ref: int i =0; 有函数fun(ref i)和fun(i) 它们的函数体都是{ i = 3;},那么在执行以下两段代码后: (1)int i = 0; fun(i); System.Console.WriteLi
小小许
2018/09/20
4330
C#中ref和out的区别使用
ref 关键字会导致参数通过引用传递,而不是通过值传递。 通过引用传递的效果是,对所调用方法中的参数进行的任何更改都反映在调用方法中。 例如,如果调用方传递本地变量表达式或数组元素访问表达式,所调用方法会将对象替换为 ref 参数引用的对象,然后调用方的本地变量或数组元素将开始引用新对象。
vv彭
2020/10/27
1.2K0
C#中?与??的区别
起初我也不知道C#中有??操作符,今天张鹏在查看我的MVC示例程序的时候问了这个问题,检查代码后发现,下面的代码是VS2010在生成MVC应用程序自己添加的:         public Accou
用户1177503
2018/02/26
9370
select的onchange事件和onclick事件区别
一句话理解,onchange是当发生改变时触发事件,onclick当被点击时触发事件
JaneYork
2023/10/11
8150
select的onchange事件和onclick事件区别
C#中write和writeline的区别「建议收藏」
writeLine:将要输出的字符串与换行控制字符一起输出,当次语句执行完毕时候,光标会移到目前输出字符串的下一行。 例如: write:光标会停在输出字符串的最后一个字符,不会移动到下一行。
全栈程序员站长
2022/07/26
1.1K0
C#中write和writeline的区别「建议收藏」

相似问题

C#列表.ConvertAll效率和开销

45

ConvertAll (UWP C#)

13

C# ConvertAll语法

27

带索引的C#列表ConvertAll

18

IEnumerable<T>.ConvertAll和DDD

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文