使用VB.NET lambda表达式计算方差

时间:2011-02-03 15:11:04

标签: vb.net linq 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);
}

CodeProject上描述了相应的VB.NET lambda表达式语法,但我仍然坚持转换 Aggregate 函数。

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

1 个答案:

答案 0 :(得分:4)

以下内容仅适用于VB 10.以前的版本不支持多行lambdas。

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

Function(foo) bar对应于C#中的单语句lambda (foo) => bar,但是你需要这里的多行lambda,它只存在于VB 10之后。

但是,我对原始代码持谨慎态度。修改total似乎是一个错误,因为没有Aggregate重载通过引用传递其参数。所以我建议原始代码是错误的(即使它可能实际编译),并且正确的解决方案(在VB中)看起来像这样:

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

此外,这不需要任何多行lambda,因此也适用于旧版本的VB。