2011-02-03 70 views
1

我想下面的代码转换为方差计算上CodeProject描述成对应VB.NET lambda表达式语法计算方差与VB.NET lambda表达式

public static double Variance(this IEnumerable<double> source) 
{ 
    double avg = source.Average(); 
    double d = source.Aggregate(0.0, 
       (total, next) => total += Math.Pow(next - avg, 2)); 
    return d/(source.Count() - 1); 
} 

,但我被困在转换汇总功能。

如何在VB.NET中实现该代码?

回答

4

以下仅适用于VB 10.以前的版本不支持多行lambda表达式。

Dim d = source.Aggregate(0.0, 
    Function(total, next) 
     total += (next - avg)^2 
     Return total 
    End Function) 

Function(foo) bar对应于C#中的单语句拉姆达(foo) => bar,但你需要在这里多行拉姆达只因为VB 10

不过,我警惕的原代码的存在。修改total看起来像是一个错误,因为没有Aggregate重载通过引用传递它的参数。所以,我建议,原来的代码是错误的(即使它实际上可能编译),而正确的解决方案(以VB)是这样的:

Dim d = source.Aggregate(0.0, _ 
    Function(total, next) total + (next - avg)^2) 

而且,这并不需要任何多线lambda表达式,因此也适用于旧版本的VB。

+0

那么`total + = whatever`会返回`total`的新值,所以它会工作*,这只是误导,因为它和`total + whatever`完全相同 - 设置`total`为lambda中的新值不做任何事情。 – 2011-02-03 16:12:35