我有一个包含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.
为什么这不起作用?
注意:我已经用另一种方式实现了它,但我想了解为什么上面的代码不起作用
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)