可能有一个简单的解决方法,但我目前的代码类似于
dim dr as dbDataReader
try
dr = connection.getDataReader(sql_str)
Catch ex as sqlClientException
log.error(ex)
finally
if not IsNothing(dr) then
dr.close
end if
end try
然而,Visual Studio仍然警告我
if not IsNothing(dr) then
dr.close
end if
可能导致NullReferenceException。减轻这种情况的最佳方法是什么?我无法将声明移到try块中。
答案 0 :(得分:9)
将dr声明显式初始化为Nothing:
Dim dr As DbDataReader = Nothing
警告将消失。
答案 1 :(得分:4)
如果GetDataReader
抛出,dr
将不会被分配,并且仍会保留其初始值。 VB.NET会初始化对Nothing
的引用,但编译器不会让你依赖它。
如果使用.NET 2.0,我建议使用Using
语句:
Using dr As DbDataReader = connection.GetDataReader(sql_str)
Try
' Do something with dr '
Catch ex As SqlClientException
log.error(ex)
End Try
End Using
答案 2 :(得分:0)
您的代码是正确的。在finally
语句中,只要您检查以确保对象不为null,它就不会根据代码中的内容抛出空引用异常。
答案 3 :(得分:0)
我不记得究竟,VB.NET是如何初始化变量的,但是在C#中你必须先设置“dr”一些值/引用,然后才能在某处使用它们。
我认为这应该有效:
dim dr as dbDataReader
try
dr = connection.getDataReader(sql_str)
Catch ex as sqlClientException
log.error(ex)
dr = Nothing ' there is the change '
' finaly block is not necesary '
end try
if not IsNothing(dr) then
dr.close
end if