嵌入式如果然后其他表现不同,那么Iif

时间:2014-03-07 22:09:43

标签: vb.net reporting-services null

我的嵌入式代码中有这个功能

Function IsNull(ByVal Input As Double, ByVal D As Double) As Double
    If IsNothing(Input) Then
        Return D
    Else
        Return Input
    End If
End Function

我用它来替换像这样的表达式

Iif(IsNothing(Fields!Amount.Value), 1, Fields!Amount.Value)

我认为他们会做同样的事情,但事实并非如此。当我把这个表达式放在我的报告中时

=Code.IsNull(Fields!Amount.Value, 1) = Iif(IsNothing(Fields!Amount.Value), 1, Fields!Weight.Value)

Fields!Amount.ValueNULL时,我收到“假”。

我的猜测是,当我将NULL传递给Input并输入Double时,会发生一些不稳定的事情。但我不太了解VB知道实际发生了什么。

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

Function IsNull(ByVal Input As Object, ByVal D As Double) As Double
    If IsNothing(Input) Then
        Return D
    Else
        Return CDbl(Input)
    End If
End Function

或:

Function IsNull(ByVal Input As Double?, ByVal D As Double) As Double
    If Not Input.HasValue Then
        Return D
    Else
        Return Input.Value
    End If
End Function