为什么inline if会产生与正常if不同的结果?

时间:2018-09-21 14:49:08

标签: .net vb.net

假设exp.Row.IsdeliveryDateNull()返回True。
具有以下代码:

Dim theDate As Date?

If exp.Row.IsdeliveryDateNull() Then
    theDate = Nothing
Else
    theDate = exp.Row.deliveryDate
End If
' Result: theDate = Nothing

theDate = If(exp.Row.IsdeliveryDateNull(), Nothing, exp.Row.deliveryDate)
' Result: theDate = is #1/1/0001 12:00:00 AM# (Default value of Date)

theDate 为什么会根据if(常规或内联)的类型获得不同的值?
我原本以两种方式期待theDate = Nothing

我发现了类似的问题: Why C# inline if result is different than if?

1 个答案:

答案 0 :(得分:1)

If运算符将永远不会将Nothing解释为可为空的值类型,除非其他可能的返回类型也为可为空的值类型。如果值是常规值类型,则Nothing将始终被解释为该类型的默认值。为了使If的返回类型为Date?,那么至少一个可能的返回值实际上必须明确为Date?

theDate = If(exp.Row.IsdeliveryDateNull(), Nothing, New Date?(exp.Row.deliveryDate))

或:

theDate = If(exp.Row.IsdeliveryDateNull(), DirectCast(Nothing, Date?), exp.Row.deliveryDate)