【发布时间】:2009-02-06 06:36:26
【问题描述】:
我在这里错过了什么?
我想像这样简单地调用 Select():
List<int> list = new List<int>();
//fill the list
List<int> selections = (List<int>)list.Select(i => i*i); //for example
而且我一直在投射它时遇到问题。我错过了什么?
【问题讨论】:
我在这里错过了什么?
我想像这样简单地调用 Select():
List<int> list = new List<int>();
//fill the list
List<int> selections = (List<int>)list.Select(i => i*i); //for example
而且我一直在投射它时遇到问题。我错过了什么?
【问题讨论】:
Select() 将返回一个 IEnumerable
List<int> selections = list.Select(i => i*i).ToList();
【讨论】:
Select() 不返回列表,因此您当然不能将其转换为列表。 您可以改用 ToList 方法:
list.Select(i => i*i).ToList();
【讨论】:
正如其他人所说,Select 返回一个 IEnumerable<T>,它实际上并不是一个列表 - 它是一个惰性求值的迭代器块的结果。
但是,如果您正在处理列表,并且您想要一个除了投影之外什么都没有的列表,使用 List<T>.ConvertAll 会更有效,因为它能够立即创建具有正确大小的新列表:
List<int> selections = list.ConvertAll(i => i*i);
不过,除非您特别关心效率,否则我可能会坚持使用 Select,因为它可以让您与其他 LINQ 代码更加一致。
【讨论】: