这个项目在某个方法中有这个代码:
Dim pDataTable As DataTable
Dim pDS As DataSet
pDS = someClass.GetSomeDataSet()
If (pDS.Tables.Count > 0) Then
pDataTable = pDS.Tables("SomeTableName")
foo(pDataTable)
EndIf
If (pDataTable IsNot Nothing) Then
pDataTable.Dispose()
EndIf
pDataTable = Nothing
很好奇,但为什么If (pDataTable IsNot Nothing) Then
会引发此警告:
变量'pDataTable'在赋值之前使用。在运行时可能会产生空引用异常。
我完全理解它告诉我的是什么。如果我只是调用pDataTable.Dispose()
并且它从未在第一个if块中实例化,那么我的应用程序将会爆炸。但是为什么它会产生一个警告,只是简单地将一个值与null进行比较?
如果我想摆脱这个警告,我是否应该更改pDataTable
的声明以创建DataTable
的新实例?
答案 0 :(得分:6)
如果要在将其分配到别处之前使用它,则应将其值设置为null:
Dim pDataTable As DataTable = Nothing
这甚至适用于您检查其值的情况,即使您只是检查它是否为空,例如通过If (pDataTable IsNot Nothing)
。不幸的是,编译器不够聪明,无法意识到你正在检查它是否为空,因此警告。