相同的If()和If产生不同的结果

Bri*_*Kay 3 .net vb.net if-statement

下面两段代码有什么区别?我希望他们能够返回相同的结果,但他们没有.

在xml.@Type ="null"的情况下,我希望PatientMetricTypeID(一个可以为空的整数)最终成为Nothing.

第1块:如果()

在这种情况下,它最终为0.看起来Nothing被视为一个整数并转换为0.我可以看到为什么这可能发生但不完全...我想知道它是如何工作的,如果有解决方法

    Dim PatientMetricTypeID As Integer? = If(xml.@Type = "null",
                                 Nothing,
                                 CType([Enum].Parse(GetType(PatientMetricTypes), xml.@Type), Integer))
Run Code Online (Sandbox Code Playgroud)

块#2:如果

在这种情况下,它最终为Nothing - 预期的行为.

    Dim PatientMetricTypeID As Integer?

    If xml.@Type = "null" Then
        PatientMetricTypeID = Nothing
    Else
        PatientMetricTypeID = CType([Enum].Parse(GetType(PatientMetricTypes), xml.@Type), Integer)
    End If
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 8

If表达式的类型的Integer,而不是Integer?.

VB.Net的Nothing关键字不等同于null; 它等同于C# default(T),T表达式的类型在哪里.
引用MSDN:

什么都没有(Visual Basic)

表示任何数据类型的默认值.

当你写的时候If(..., Nothing, SomeInteger),如果If输入Integer,那么Nothing就变成了0.
要强制将If表达式键入为Integer?,可以替换NothingNew Integer?().

有关更详细的说明,请参阅我的博客.