У меня есть троичное выражение, которое проверяет, является ли Object
значением DBNull.Value
, и возвращает Nothing
, если True
, иначе, если False
возвращает значение, преобразованное в тип Date
этого Object
,Однако по какой-то странной причине моя переменная DateTime
, которая устанавливается троичным выражением, таинственным образом установлена на '1/1/0001 12:00:00 AM'
, хотя Object
, безусловно, является DBNull.Value
.Кто-нибудь еще может воспроизвести это поведение?Если так, то почему это происходит?
Странная часть в том, что я изменил это выражение на обычные старые блоки if и else, и я совсем не понимаю этого поведения.Таким образом, это должно быть как-то связано с троичным утверждением.
Module Module1
Sub Main()
Dim dt As New DataTable
dt.Columns.Add(New DataColumn("DateColumn", GetType(String)))
dt.Rows.Add()
Dim testDate = dt(0).Item(0)
Dim setDate As DateTime? = Nothing
'Doesn't work
setDate = If(testDate Is DBNull.Value, Nothing, CDate(testDate))
'Works
'If testDate Is DBNull.Value Then
' setDate = Nothing
'Else
' setDate = CDate(testDate)
'End If
'Also works
'setDate = If(testDate Is DBNull.Value, Nothing, CType(testDate, DateTime?))
'This works too
'setDate = If(testDate Is DBNull.Value, Nothing, testDate)
'Working
'setDate = IIf(testDate Is DBNull.Value, Nothing, testDate)
If setDate IsNot Nothing Then
Console.WriteLine("Why does setDate = '" & setDate.ToString & "' ?!")
End If
Console.ReadKey()
End Sub
End Module
Я хотел бы использовать троичное выражение, потому что оно меньше кода.