无法将Select()的结果转换为List <t> </t>

时间:2009-02-06 06:36:27

标签: c# .net linq

我在这里缺少什么?

我想像这样简单地调用Select():

List<int> list = new List<int>();  
//fill the list
List<int> selections = (List<int>)list.Select(i => i*i); //for example

我一直遇到麻烦。我错过了什么?

3 个答案:

答案 0 :(得分:5)

Select()会返回一个IEnumerable&lt; int&gt;类型,您必须使用ToList() operator

List<int> selections = list.Select(i => i*i).ToList();

答案 1 :(得分:2)

Select()不会返回List,因此您无法将其强制转换为列表。 您可以改为使用ToList方法:

list.Select(i => i*i).ToList();

答案 2 :(得分:2)

正如其他人所说,Select返回一个IEnumerable<T>,它实际上不是一个列表 - 它是一个延迟评估的迭代器块的结果。

但是,如果您正在处理列表,并且希望列表中只返回投影,则使用List<T>.ConvertAll会更有效率,因为它可以立即创建具有正确大小的新列表:

List<int> selections = list.ConvertAll(i => i*i);

但是,除非你特别关注效率,否则我可能会坚持使用Select,因为它会让你与其他LINQ代码更加一致。