¿Por qué aparece el error de compilación "Uso de variable local no asignada"?

Resuelto theknut asked hace 12 años • 10 respuestas

Mi codigo es el siguiente

int tmpCnt;  
if (name == "Dude")  
   tmpCnt++;  

¿ Por qué aparece el error "Uso de variable local no asignada tmpCnt" ?

Sé que no lo inicialicé explícitamente, pero debido a la Tabla de valores predeterminados , se inicializa un tipo de valor de 0todos modos. La referencia también me recuerda:

Recuerde que no se permite el uso de variables no inicializadas en C#.

Pero ¿por qué tengo que hacerlo explícitamente si ya está hecho por defecto? ¿No ganaría rendimiento si no tuviera que hacerlo?

theknut avatar Feb 11 '12 01:02 theknut
Aceptado

Las variables locales no se inicializan. Tienes que inicializarlos manualmente.

Los miembros se inicializan, por ejemplo:

public class X
{
    private int _tmpCnt; // This WILL initialize to zero
    ...
}

Pero las variables locales no lo son:

public static void SomeMethod()
{
    int tmpCnt;  // This is not initialized and must be assigned before used.

    ...
}

Entonces tu código debe ser:

int tmpCnt = 0;  
if (name == "Dude")  
   tmpCnt++;  

Entonces, en resumen, los miembros se inicializan, los locales no. Es por eso que aparece el error del compilador.

James Michael Hare avatar Feb 10 '2012 18:02 James Michael Hare

Las asignaciones predeterminadas se aplican a los miembros de la clase, pero no a las variables locales. Como lo explicó Eric Lippert en esta respuesta , Microsoft podría haber inicializado los locales de forma predeterminada, pero eligen no hacerlo porque usar un local no asignado es casi con certeza un error.

Sergey Kalinichenko avatar Feb 10 '2012 18:02 Sergey Kalinichenko