以下用于乘法的lambda表达式有什么问题(C#3.0)

New*_*bie 1 c#-3.0

List<double> y = new List<double> {   0.4807, -3.7070, -4.5582, 
                                    -11.2126, -0.7733,  3.7269, 
                                      2.7672,  8.3333,  4.7023 };

List<double> d1 = y.ForEach(i => i * 2);
Run Code Online (Sandbox Code Playgroud)

错误:只能将赋值,调用,递增,递减和新对象表达式用作语句

怎么了?

谢谢

Ada*_*ras 6

尝试改为:

List<double> d1 = y.Select(i => i * 2).ToList();
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 6

List<T>.ForEach不执行转换:它为每个项目执行给定的委托,但这就是全部.这就是为什么它有一个void返回类型 - 以及为什么参数类型Action<T>而不是类似的东西Func<T, TResult>.最后一部分是您遇到编译错误的原因.你基本上是想做:

Action<double> = i => i * 2;
Run Code Online (Sandbox Code Playgroud)

这将给你相同的编译错误.

如果你想坚持使用List<T>方法(例如,因为你使用的是.NET 2.0),你可以使用List<T>.ConvertAll:

List<double> d1 = y.ConvertAll(i => i * 2);
Run Code Online (Sandbox Code Playgroud)