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);
错误:只能将赋值,调用,递增,递减和新对象表达式用作语句
有什么问题?
谢谢
答案 0 :(得分:6)
尝试改为:
List<double> d1 = y.Select(i => i * 2).ToList();
答案 1 :(得分:6)
List<T>.ForEach
不执行转换:它为每个项执行给定的委托,但这就是全部。这就是它具有void
返回类型的原因 - 以及参数类型为Action<T>
而不是Func<T, TResult>
的原因。最后一部分是您遇到编译错误的原因。你基本上是想做:
Action<double> = i => i * 2;
这会给你相同的编译错误。
如果您想坚持使用List<T>
方法(例如,因为您使用的是.NET 2.0),可以使用List<T>.ConvertAll
:
List<double> d1 = y.ConvertAll(i => i * 2);
答案 2 :(得分:1)
List.Foreach
需要一个Action<>
委托,它不会返回任何内容,因此您无法使用它来创建新的列表。正如其他人所指出的那样,使用ForEach并不是最好的选择。有关如何使用ForEach
执行操作的示例可能有助于理解原因:
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 = new List<double>();
Action<double> a = i => d1.Add(i*2);
y.ForEach(a);
答案 3 :(得分:-2)
List<double> d1 = y.ForEach(i => i = i * 2);