当我调用其中MyObj为Nothing的CSng(MyObj)时,它会引发异常“Nullable Object必须有值”
所以为了进一步测试,我调用了CSng(Nothing) - (使用硬编码的Nothing值),它返回0。
任何人都可以向我解释这个吗?
Dim it As Single?
it = Nothing
Dim it2 As Single = CSng(it) ' Exception here
答案 0 :(得分:1)
首先,这是一件奇怪的事情。 it
已经是Nullable(Of Single)
。致电CSng()
涉及许多额外的行李,Nullable(Of Single)
会让您避免。这应该会更好:
Dim it As Single? = Nothing
Dim it2 As Single = it.GetValueOrDefault()
答案 1 :(得分:0)
您已将it
声明为可为空的Single,因此将Nothing
分配给它是没有问题的。但CSng(it)
正在尝试将该值转换为常规(不可为空)的单值,而该单值无法存储值Nothing
,这就是您获得异常的原因。
如果it
为Nothing
,您需要决定要执行的操作。例如,如果it2
为it
Nothing
为Dim it As Single? = Nothing
Dim it2 As Single = If(it Is Nothing, 0, CSng(it))
,则可以使用以下代码:
Mike,Peter,John
John,Mike,Peter,Robert,Stanley