Nullable(Of ) 在条件三元运算符中未设置为 Nothing
Nullable(Of ) is not set to Nothing in conditional ternary operator
为什么我不能通过条件三元运算符将 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?))
Nothing
转换为很多类型,而不仅仅是 T?
。它可以愉快地转换为 Double
:
Function X() As Double
Return Nothing ' result: 0.0
End Function
或 Integer
。这是你在 If(X, 0, Nothing)
中使用的 Nothing
的感觉,因为 If
需要第二个和第三个参数在类型上匹配:它将它视为类型 Integer
,因为那是 0
.
的类型
明确指定其中一种类型为可为空(Integer?
或 Double?
都可以)让编译器找出你想要的:
d = If(False, CType(0, Double?), Nothing)
,或d = If(False, 0, CType(Nothing, Double?))
为什么我不能通过条件三元运算符将 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?))
Nothing
转换为很多类型,而不仅仅是 T?
。它可以愉快地转换为 Double
:
Function X() As Double
Return Nothing ' result: 0.0
End Function
或 Integer
。这是你在 If(X, 0, Nothing)
中使用的 Nothing
的感觉,因为 If
需要第二个和第三个参数在类型上匹配:它将它视为类型 Integer
,因为那是 0
.
明确指定其中一种类型为可为空(Integer?
或 Double?
都可以)让编译器找出你想要的:
d = If(False, CType(0, Double?), Nothing)
,或d = If(False, 0, CType(Nothing, Double?))