¿Por qué aparece el error de compilación "Uso de variable local no asignada"?
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 0
todos 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?
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.
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.