Vb.net 编译器警告:空引用异常

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

我在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 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