我有一个int列表,我想知道我是否可以使用Linq基于之前的列表创建另一个对象T列表。
简化问题:
我有一个像这样的int列表:1,2,3,4 我希望有(1,2),(2,4),(3,6),(4,8)
通常情况下,我们可以在没有Linq
的情况下轻松完成public class T
{
int first;
int Second;
public T(int x, int y)
{
first = x;
Second = y;
}
}
class Program
{
static void Main(string[] args)
{
List<int> series = new List<int>() { 1,2,3,4 };
List<T> obj = new List<T>();
foreach (int item in series)
{
obj.Add(new T(item,item*2));
}
}
}
完美无缺。 但是当我尝试使用Linq时
List<T> obj = series.Select(x=> {new T(x,x*2)}).ToList<T>();
我认为它会起作用,但我收到错误说
Error 2 The type arguments for method 'System.Linq.Enumerable.Select<TSource,TResult>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,int,TResult>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
我做错了什么?我仍然是一个新手(可能是几个月大)学习Linq :)。
答案 0 :(得分:8)
摆脱花括号......
List<T> obj = series.Select(x=> new T(x,x*2)).ToList<T>();
当你写一个lambda时:
x => x * 2
假设右侧是返回值。当你使用花括号时,它希望你实际使用return关键字,如下所示:
x => { return x * 2; }
当你不这样做时,我打赌它假设lambda返回void
。