为什么这个简单的LINQ表达式不起作用?

stt*_*106 1 c# linq

这一定很简单,但我不明白为什么不允许这样做:

var testList = new List<int> { 2, 3, 400, 304, 50, 41 };
testList.Select(x => Console.WriteLine(x));
Run Code Online (Sandbox Code Playgroud)

但这很好:

testList.Select(x => x * 2);
Run Code Online (Sandbox Code Playgroud)

我在哪里误解LINQ导致这种混乱?

cdh*_*wie 9

问题是您传递给的函数Select()必须返回一个值,因为其目的Select()是将序列的元素投影到其他值中.但是Console.WriteLine(x)返回void(没有值).


And*_*ker 8

.Select取一个Func<TSource, TResult>(一个带有a TSource并返回的lambda TResult).

因为Console.WriteLine就是void,你的拉姆达不返回任何东西,因此不符合要求.

  • (Nitpick:lambda没有特定的类型,因为编译器无法推断委托类型.它可以隐式转换为`Action <int>`但它可以很容易地隐式转换为接受单个参数的其他委托类型of*any*type并返回`void`.) (2认同)