Leí esta pregunta (What is the scope of a lambda variable in C#?)¿Por qué existe el ámbito variable Lambda fuera de LINQ Query?
Pero se trata del alcance variable de Lambda dentro de LINQ Query.
Ahora a mi pregunta
Digamos que tengo una consulta LINQ muy simple.
var Foo = FoobBar.Select(x => x);
var x = somefunction();
Compiler dice: A local variable 'x' cannot be declared in this scope because it would give a different meaning to 'x', which is already used in a 'child' scope to denote something else
.
¿Por qué es así? ¿La variable Lambda no debería dejar de existir cuando termina la consulta LINQ?
EDIT: Después de leer las respuestas llegué a la conclusión de que es el exterior x
(devuelto desde la función) cuyo alcance se extiende dentro de LINQ Query.
Después de leer todas las respuestas llegué a la conclusión de que es al revés. el alcance de la variable externa existe dentro de la consulta LINQ. –
Y a la inversa también ;-) Un lenguaje no sería fácil de refactorizar si permitía compilar el código solo porque la variable en conflicto ('var x = somefunction();') está en la segunda línea, y luego cuando Mueves la segunda línea en la primera línea, para tu disgusto, ya no compilaría. C# tiene un mecanismo preventivo, no permite que 'var x = someFunction()' compile, incluso está en la segunda línea, ya que puede volver a factorizar el código en cualquier momento y ponerlo en la primera línea más adelante. Estamos viviendo en una era en la que un código susceptible de refactorización es la norma –