Nullable(Of)在条件三元运算符中未设置为Nothing

时间:2016-12-31 19:59:34

标签: vb.net double nullable nothing

为什么我不能通过条件三元运算符将Nothing设置为Nullable(Of Double),但我可以直接使用?

Dim d As Double? = Nothing
d = If(True, 0, Nothing)    ' result: d = 0
d = Nothing                 ' result: d = Nothing
d = If(False, 0, Nothing)   ' result: d = 0 Why?

编辑:这些工作(基于以下接受的答案):

d = If(False, 0, New Integer?)
d = If(False, CType(0, Double?), Nothing)
d = If(False, 0, CType(Nothing, Double?))

1 个答案:

答案 0 :(得分:1)

Nothing会转换为很多类型,而不仅仅是T?。它可以愉快地转换为Double

Function X() As Double
    Return Nothing ' result: 0.0
End Function

Integer。您在Nothing中使用If(X, 0, Nothing)的感觉是因为If需要第二个和第三个参数匹配类型:它将其视为类型{ {1}},因为它是Integer的类型。

明确地将其中一个类型指定为可为空(0Integer?将起作用)让编译器找出你想要的内容:

Double?d = If(False, CType(0, Double?), Nothing)