我这辈子都搞不懂为什么所有的 foo 都不为空。
我假设 .ForAll()
应该在我调用 .All()
方法之前执行,但事实并非如此?
public class Foo
{
public string Bar { get; set; }
}
static void Main(string[] args)
{
var foos = new List<Foo> { new Foo(), new Foo(), new Foo() };
var newFoos = foos
.AsParallel()
.Select(x =>
{
x.Bar = "";
return x;
});
newFoos.ForAll(x => x = null);
var allFoosAreNull = newFoos.All(x => x == null);
Console.WriteLine(allFoosAreNull); // False ??
}
最佳答案
当你这样做的时候
newFoos.ForAll(x => x = null);
您正在将 null
分配给 x
,这是您的 lambda 的参数。 x
是 lambda 的局部变量。它不是一个 ref
参数,给它赋值在它的主体之外没有任何效果。实际上,该行什么都不做。
关于c# - 并行 LINQ - .Select() + .ForAll() 返回奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30470960/