No se puede compilar el siguiente código indicando "Una variable local llamada 'st' no se puede declarar en este ámbito porque daría un significado diferente a 'st', que ya se usa en un ámbito 'secundario' para denotar algo más ":Child Scope & CS0136
var l = new List<string>();
l.Find(st => st.EndsWith("12"));
string st = "why this fails?";
entiendo por qué esto no funcionará:
string preParent = "";
{
string preParent = "Should fail cause we change the meaning";
}
Cuando hacemos lo que después de conseguir" CS0103: el nombre 'postParent' no existe en el actual contexto ":
{
string postParent=string.Empty;
}
postParent = "Should this work?";
Lo que no entiendo es por qué el compilador es lo suficientemente inteligente para ver que postParent no está dentro del alcance, pero no me permite definir una nueva variable que tenga el mismo nombre que una variable utilizada en un ámbito hijo (que obviamente está fuera de alcance en este punto).
¿Es el compilador el ámbito de aplicación simple negándose a dejarme usar la variable? Si es así, esto tiene sentido.
===========
Editado:
Creo que lo que también me parece interesante es cómo se puede tener la misma variable dentro de los dos ámbitos secundarios en un único método, por lo esto es válido:
{
string thisWorks= string.Empty;
}
{
string thisWorks= "Should this work?";
}
Sólo soy un poco curioso que se puede tener dos variables con el mismo nombre que siempre y cuando estén en el mismo nivel (si nos fijamos en alcance como un árbol). Esto tiene sentido porque puede tener variables locales en dos métodos de la misma clase con el mismo nombre.
Me sorprende que el compilador pueda diferenciar y permitir esto, mientras que no permitiría la variable postParent. ¿Y esto es una limitación técnica o fue esta una decisión de diseño? Eso es lo que realmente estoy tratando de conseguir ;-)
¿Por qué un voto a favor después de 5 meses? – JoshBerke