C#选择查询不修改外部变量

3Pi*_*3Pi 2 c# linq

我有一个包含n个元素的类,以及一个返回元素的根和平方的属性:

public double Length 
{ 
    get 
    { 
        double sum = 0.0; 
        Elements.Select(t => sum += t * t);  
        return Math.Sqrt(sum); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用 - 无论元素的价值如何,总和仍为0.0.
为什么这不起作用?

注意:我已经用另一种方式实现了它,但我想了解为什么上面的代码不起作用

dtb*_*dtb 7

LINQ使用延迟执行 - Select方法不立即对所有元素执行lambda,但返回一个IEnumerable <T>,当执行时,它会枚举每个元素上的lambda.

另请注意,LINQ用于查询,而不是用于为每个元素执行代码块.你应该编写代码,使lambda中没有语句,只有一个没有副作用的表达式.当您尝试计算总和时,可以使用Sum方法:

public double Length 
{ 
    get 
    { 
        double sum = elements.Select(t => t * t).Sum();
        return Math.Sqrt(sum); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

要么

public double Length 
{ 
    get 
    { 
        double sum = elements.Sum(t => t * t);
        return Math.Sqrt(sum); 
    } 
}
Run Code Online (Sandbox Code Playgroud)