并行LINQ - .Select()+ .ForAll()返回奇怪的结果

时间:2015-05-26 23:57:53

标签: c# plinq

对于我的生活,我无法弄清楚为什么所有的foos都不为空。 我假设.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 ??
}

1 个答案:

答案 0 :(得分:7)

当你这样做时

newFoos.ForAll(x => x = null);

您要将null分配给x,这是您的lambda的参数。 x是lambda的本地。它不是ref参数,为其赋值不会影响其正文。实际上,这条线没有任何作用。