工作中的这个项目在某些方法中有这个代码:
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
Run Code Online (Sandbox Code Playgroud)
只是好奇,但为什么会If (pDataTable IsNot Nothing) Then引起这个警告:
变量'pDataTable'在赋值之前使用.在运行时可能会导致空引用异常.
我完全理解它告诉我的是什么.如果我只是调用pDataTable.Dispose()它并且它从未在第一个if块中实例化,那么我的应用程序将会爆炸.但是为什么它会产生一个警告,只是简单地将值与null进行比较?
如果我想摆脱这个警告,我应该只是更改声明pDataTable还要创建一个新实例DataTable吗?
如果要在将其分配到别处之前使用它,则应在声明它时将其值设置为null:
Dim pDataTable As DataTable = Nothing
Run Code Online (Sandbox Code Playgroud)
这甚至适用于您检查其值的情况,即使您只检查它是否为空,例如通过If (pDataTable IsNot Nothing).不幸的是,编译器不够聪明,没有意识到你正在检查它是否为空,因此警告.