Vb.net 编译器警告:空引用异常
我在VisualStudio2005中有以下代码Vb.net 编译器警告:空引用异常,vb.net,visual-studio-2005,Vb.net,Visual Studio 2005,我在VisualStudio2005中有以下代码 Dim OutFile As System.IO.StreamWriter Try OutFile = New System.IO.StreamWriter(Filename) // Do stuff with OutFile Catch Ex As Exception // Handle Exception Finally If OutFile IsNot
Dim OutFile As System.IO.StreamWriter
Try
OutFile = New System.IO.StreamWriter(Filename)
// Do stuff with OutFile
Catch Ex As Exception
// Handle Exception
Finally
If OutFile IsNot Nothing Then OutFile.Close()
End Try
但是VS2005为“如果OutFile不是…”这一行提出了警告
变量“OutFile”在赋值之前使用。运行时可能会导致空引用异常
是否有某种方法可以通过巧妙地修改代码来消除此警告,或者是否有更好的方法来完成我正在尝试的工作
谢谢
抢劫
类似于这是一个范围问题,outfile对象的初始化发生在Fianly块看不到的代码块中。当然,公认的答案是正确的,但它没有解释显式初始化的原因或时间 在声明变量时,VB.NET通常会指定一个默认值(
0
或Nothing
),但在某些情况下它不会指定
考虑这个简单的控制台应用程序:
Sub Main()
For i As Integer = 1 To 5
Dim number As Integer
If i = 3 Then number = 3
Console.Write(number)
Next
End Sub
输出是什么样子的?对于循环的每个迭代,number
都被设置为0
,并且只有在循环的第三次迭代时才被设置为3
。然后在第四次和第五次迭代中,它又是0
。所以输出是00300
,对吗?不是这样。这段代码的输出实际上是
00333
这是因为在VB.NET中,在循环中声明的变量的生存期是针对整个循环的,而不是循环的一次迭代(不是您所期望的,嗯?)。但是如果在声明时显式地将number
的值设置为0
,如下所示
Dim number As Integer = 0
然后输出看起来像
00300
因此,假设VB.NET在
Dim
变量时会设置默认值通常是安全的,但将其显式设置为0
或Nothing
以获得预期的行为总是最安全的。差不多,但它为我指明了正确的方向。不允许为NULL,但Outfile=不起作用。谢谢。刚刚注意到并修复了它。如果你猜不到的话,我通常用c语言编程。:)有一个没有警告的项目很好。再次感谢。所以我们必须使用作业来避免警告。。。?看起来相当愚蠢,特别是因为您没有将其赋值,这意味着同样的警告应该仍然存在,因为空引用仍然可能发生。这太傻了!VS甚至不应该浪费时间去弄清楚我的代码是否会给出一个空引用;一定有办法禁用此警告。不是真的。它不是试图阻止空引用,而是意外地忽略了默认值。强制您显式提供默认值以删除警告会使您意识到变量可能未定义。
Dim number As Integer = 0