Linq可以将一个int列表投射到另一个T类列表中

时间:2013-12-06 19:35:49

标签: linq

我有一个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 :)。

1 个答案:

答案 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