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

标签 c# plinq

我这辈子都搞不懂为什么所有的 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/

相关文章:

c# - Nancy Self Host 不调用 Module?

c# - 并行运行简单的 LINQ 查询

c# - 流控制台实时处理输出到文本框

.net - 线程、CultureInfo .net、TPL、PLINQ

c# - 如何将 LINQ 与二维数组一起使用

c# - 使用 PLINQ 导致 OutofMemory 异常,但使用 LINQ 则不会?

c# - Plinq 里面的 Plinq?

c# - WCF 用户名身份验证 - 教程中的异常

javascript - ExtJs 编辑器中的多行文本区域

c# - 为什么我的 switch 在有单引号时起作用?