我使用VB.NetVisual Studio 2010.Net version 4.5.50938 SP1Rel

当DateTime参数为空时,我看到传递的值是#12:00:00 AM#,基本上是DateTime.MinValue。假设myDateTime(为空)是我传递的DateTime参数,

Dim newDateTime As Nullable(Of DateTime) = If(myDateTime.Equals(DateTime.MinValue), Nothing, myDateTime)


使newDateTime的值为“ #12:00:00 AM#”而不是Nothing。我验证了If条件是否返回true。谁能告诉我为什么Nullable(Of DateTime)不是Nothing吗?

另外,以下代码有效,并且不会进入If循环。

Dim newDateTime As Nullable(Of DateTime) = Nothing
If (Not myDateTime.Equals(DateTime.MinValue)) Then
   newDateTime = myDateTime
End If

最佳答案

使用“ If”运算符,两个返回值都必须是同一类型。在这种情况下,If将返回true和false的DateTime。您可以通过执行以下操作看到它(它不会编译)。

If(True, 123, "aaa")


因此,您什么都不会得到。相反,只需返回一个可为空的值。

Dim newDateTime As Nullable(Of DateTime) = If(myDateTime.Equals(DateTime.MinValue), New Nullable(Of DateTime), myDateTime)


还是像阿尔曼说的

Dim newDateTime As Nullable(Of DateTime) = If(myDateTime.Equals(DateTime.MinValue), CType(Nothing, DateTime?), myDateTime)


更好的是,不要尝试将所有内容放在一起;)

10-02 23:44