[英]C# Select query not modifying external variable
我有一个包含n个元素的类,以及一个返回元素的根和平方的属性:
public double Length
{
get
{
double sum = 0.0;
Elements.Select(t => sum += t * t);
return Math.Sqrt(sum);
}
}
但是,这不起作用 - 无论元素的价值如何,总和仍为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);
}
}
要么
public double Length
{
get
{
double sum = elements.Sum(t => t * t);
return Math.Sqrt(sum);
}
}
延期执行。
尝试这个:
public double Length
{
get { return Math.Sqrt(Elements.Sum(t => t * t)); }
}
这里linq查询立即执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.