单行如果条件未正确评估

时间:2015-11-01 18:34:40

标签: vb.net

我开发了以下IEnumerable(of T)扩展方法来执行加权平均计算。

出于某种原因,下面编写的代码可以正常工作,但如果我取消注释显示'Return If(isNull OrElse den = 0, Nothing, num / den)的行,它将返回值0,而不应该返回任何内容。这可以通过在没有项目的列表上调用该函数来确认。调用该函数的正确方法是: list.WeightedAverage(Function(x) x.ValueProperty, Function(x) x.WeightProperty)。因为它是一种扩展方法,所以需要将它放入模块中。

<Extension>
Public Function WeightedAverage(Of T)(source As IEnumerable(Of T), valueSelector As Func(Of T, Decimal?), weightSelector As Func(Of T, Decimal?)) As Decimal?
    Dim num, den, tempDen As Decimal
    Dim tempNum As Decimal? = Nothing
    Dim isNull As Boolean = True
    For Each record In source
        tempNum = valueSelector.Invoke(record)
        tempDen = weightSelector.Invoke(record).GetValueOrDefault
        If tempNum.HasValue Then
            isNull = False
            num += tempNum * tempDen
        End If
        den += tempDen
    Next
    'Return If(isNull OrElse den = 0, Nothing, num / den)
    If isNull OrElse den = 0 Then
        Return Nothing
    Else
        Return num / den
    End If
End Function

我的问题是为什么在一行上使用If语句不起作用?

0 个答案:

没有答案