请参阅以下代码:
Dim strHideReason As String = strHideReason & " " & objDBDR.GetName(intHideCheck) & " is " & objDBDR(intHideCheck)
objDBDR(intHideCheck)为null。 objDBDR是一个datareader。
上面的代码编译,但是我试图将option strict设置为on,所以我现在必须这样做:
Dim strHideReason As String = strHideReason & " " & objDBDR.GetName(intHideCheck) & " is " & cstr(objDBDR(intHideCheck))
它现在抛出异常。我可以重构代码来解决这个问题,但是我很困惑为什么第一个编译。当option strict关闭时,编译器是否会忽略字符串连接中为空的对象?
答案 0 :(得分:0)
当OPTION STRICT OFF时:
在运行时,您的对象objDBDR(intHideCheck)
将自动转换(如果可能)以键入字符串
来自MSDN
对于Visual Basic中的字符串,空字符串等于Nothing
objDBDR(intHideCheck)
返回Nothing
,它将转换为字符串为空字符串。
当OPTION STRICT ON时:
此选项限制隐式转换,您必须自己将对象转换为字符串
对于函数Cstr
,如果参数为null
,则运行时错误将被抛出
这个答案将解释为什么会抛出运行时错误:
https://stackoverflow.com/a/979911/1565525