我使用VB.Net
,Visual 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)
更好的是,不要尝试将所有内容放在一起;)