如何从LinqExtension方法中使用的lambda表达式体修改对象
本文关键字:lambda 表达式 对象 修改 LinqExtension 方法 | 更新日期: 2023-09-27 18:01:06
我想要将lambda表达式与Select
扩展方法一起使用时的副作用,类似于以下内容:
using System;
using System.Collections.Generic;
using System.Linq;
namespace SyntaxExperiment {
public class Program {
static void Main() {
var list = new List<int>();
var results = new[] { 1, 2, 3 }
.Select(
i => {
list.Add(i);
return i;
}
);
Console.WriteLine(list.Count);
}
}
}
上面的代码输出:
0
这怎么可能?
IEnumerable<int>
,没有执行的理由。你可以强制它执行如下:
var results = new[] { 1, 2, 3 }
.Select(i => {
list.Add(i);
return i;
})
.ToList();
换言之,可枚举在通过其枚举
LINQ是基于函数式编程原理构建的,因此虽然它可以实现,但它并不是真正为改变数据或产生副作用而设计的。 您想要做的(假设实际代码比您的示例更复杂!(是选择必要的数据,然后将IEnumerable转换为List。 您也可以像下面的一样使用var results = new[] { 1, 2, 3 }.Select(i => i).ToList();
Foreach
static void Main()
{
List<int> list = new List<int>();
var results = new[] { 1, 2, 3 };
results.ToList().ForEach(i => list.Add(i));
Console.WriteLine(list.Count);
}