visual versiones ventajas todas que portable net las desventajas descargar creacion caracteristicas año vb.net visual-studio-2005

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