0

为什么我不能通过条件三元运算符将 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?))
4

1 回答 1

1

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

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

或到IntegerNothing这就是你使用 in的感觉If(X, 0, Nothing),因为If需要第二个和第三个参数来匹配类型:它把它当作 type Integer,因为那是 的类型0

将其中一种类型显式指定为可为空(Integer?或者Double?可以使用),让编译器可以确定您想要什么:

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

于 2016-12-31T20:16:12.937 回答