繁体   English   中英

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

[英]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查询立即执行。

这不起作用,因为延期执行。 你可以读这个

LINQ和延期执行

了解LINQ的延迟执行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM