CSng函数引发异常,该对象是Nothing

时间:2015-12-14 19:23:22

标签: vb.net

当我调用其中MyObj为Nothing的CSng(MyObj)时,它会引发异常“Nullable Object必须有值”

所以为了进一步测试,我调用了CSng(Nothing) - (使用硬编码的Nothing值),它返回0。

任何人都可以向我解释这个吗?

    Dim it As Single?
    it = Nothing
    Dim it2 As Single = CSng(it)   ' Exception here

2 个答案:

答案 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,这就是您获得异常的原因。

如果itNothing,您需要决定要执行的操作。例如,如果it2it NothingDim it As Single? = Nothing Dim it2 As Single = If(it Is Nothing, 0, CSng(it)) ,则可以使用以下代码:

    Mike,Peter,John                 
    John,Mike,Peter,Robert,Stanley