Me he estado preguntando por qué en C# no se permite el uso de un nombre de variable utilizado previamente en un ámbito hijo. De esta manera:Usando un nombre de variable usado en un ámbito hijo
if (true)
{
int i = 1;
}
int i = 2;
Compilar el código anterior produce un error:
A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
Y sin embargo, no se puede utilizar la variable definida en el ámbito secundario tampoco. El código anterior funciona bien en Java y no veo ninguna razón por la que no lo haga también en C#. Estoy seguro de que hay una buena razón, pero ¿qué es?
De hecho, pensé que habría una razón "real", porque realmente no puedo entender por qué alguien haría una elección como esa. : D Pero veo el punto y es bueno saber por qué. – Carlos
khilon: Realmente creo que el verdadero motivo es el que sugerí; ^) – Toad
@Carlos fyi, el _real_ razón es que todas las declaraciones de variables se mueven a la parte superior de su alcance en algún momento (compilación o JIT). Por lo tanto, el orden de sus ámbitos en relación con sus declaraciones es poco importante, un conflicto de alcance hijo/ancestro siempre será un conflicto en tiempo de ejecución. El compilador lo rechaza por adelantado. – Gusdor