使用if语句在Nullable Double中存储Nothing

时间:2014-12-18 17:32:14

标签: vb.net

我只是偶然发现了一些非常奇怪的可空变量:

'Normal case 
Dim myNumber As Double? = Nothing
Dim hasValue As Boolean = myNumber.HasValue 'False as expected

'Weird case
Dim myNumber2 As Double? = If(True, Nothing, 42)
Dim hasValue2 As Boolean = myNumber2.HasValue 'True ?! (myNumber2 == 0)

为什么if在我的可以为空的Double中存储0而不是Nothing?

1 个答案:

答案 0 :(得分:1)

If(True, Nothing, 42)让你失望。对于IF语句,两个结果都必须是相同的类型。由于Nothing不是类型,因此VB会自动查看第二个结果并将Nothing转换为双精度值,结果为0.0。