vb.net - versiones - visual basic.net pdf
Advertencia del compilador: excepción de referencia nula (3)
Es una cuestión de alcance, la inicialización del objeto archivo está sucediendo en un bloque de código no visible para el bloque fianlly.
Tengo el siguiente código en 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
Pero VS2005 abre la advertencia para la línea "If OutFile IsNot .." que
Variable ''OutFile'' se usa antes de que se le haya asignado un valor. Una excepción de referencia nula podría resultar en el tiempo de ejecución.
¿Hay alguna manera de eliminar esta advertencia alterando sutilmente el código o hay una forma mejor de hacer lo que estoy tratando de hacer?
Gracias
Robar
La respuesta aceptada es correcta, por supuesto, pero no explica por qué o cuándo puede importar la inicialización explícita.
VB.NET generalmente asigna un valor predeterminado ( 0
o Nothing
) cuando se declara una variable, pero hay casos de esquina donde no lo hace.
Considera esta simple aplicación de consola:
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
¿Cómo es el resultado? Es de esperar que ese number
se establezca en 0
para cada iteración del ciclo, y solo se establece en 3
en la tercera iteración del ciclo. Luego, para la cuarta y quinta iteración, sería 0
nuevamente. Entonces, la salida es 00300
, ¿verdad? No tan. La salida de este código es en realidad
00333
Eso es porque en VB.NET, el tiempo de vida de una variable declarada en un ciclo es para todo el ciclo, no para una iteración del ciclo (No es lo que esperarías, ¿eh?). Pero si establece explícitamente el valor de number
en 0
en su declaración, como tal
Dim number As Integer = 0
entonces la salida se ve como
00300
Por lo tanto, generalmente es seguro suponer que VB.NET establecerá el valor predeterminado cuando se Dim
una variable, pero siempre es más seguro establecerlo explícitamente en 0
o Nothing
para obtener el comportamiento esperado.
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
Similar al error C #: uso de variable local no asignada