我在Visual Studio 2005中有以下代码。
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会显示“If OutFile IsNot ..”这一行的警告
变量'OutFile'在分配值之前使用。在运行时可能会产生空引用异常。
有没有办法通过巧妙地改变代码来删除这个警告,或者只是有更好的方法来做我正在尝试做的事情?
由于
罗布
答案 0 :(得分:10)
Dim OutFile As System.IO.StreamWriter
OutFile = Nothing
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
类似
答案 1 :(得分:2)
它是一个范围问题,outfile对象的初始化发生在fianlly块不可见的代码块中。
答案 2 :(得分:1)
当然,接受的答案是正确的,但它没有解释为什么或何时显式初始化可能很重要。
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
或{ {1}}获得预期的行为。