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

use*_*746 1 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));
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这非常有效.但是当我尝试使用Linq时

List<T> obj = series.Select(x=> {new T(x,x*2)}).ToList<T>();
Run Code Online (Sandbox Code Playgroud)

我认为它会起作用,但我说错了

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.
Run Code Online (Sandbox Code Playgroud)

我做错了什么?我仍然是一个新手(可能是几个月大)学习Linq :)

Joh*_*ibb 8

摆脱花括号......

List<T> obj = series.Select(x=> new T(x,x*2)).ToList<T>();
Run Code Online (Sandbox Code Playgroud)

当你写一个lambda像:

x => x * 2
Run Code Online (Sandbox Code Playgroud)

假设右侧是返回值.当你使用花括号时,它希望你实际使用return关键字,如下所示:

x => { return x * 2; }
Run Code Online (Sandbox Code Playgroud)

如果你不这样做,我打赌它假设lambda返回void.