我在这里缺少什么?
我想像这样简单地调用Select():
List<int> list = new List<int>();
//fill the list
List<int> selections = (List<int>)list.Select(i => i*i); //for example
我一直遇到麻烦。我错过了什么?
答案 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代码更加一致。