Ich habe diese Frage gelesen (What is the scope of a lambda variable in C#?)Warum Lambda-Variablenbereich außerhalb von LINQ Query existiert?
Aber es geht um Lambda Variable Bereich in LINQ-Abfrage.
Nun zu meiner Frage
Können sagen, ich habe eine sehr einfache LINQ-Abfrage.
var Foo = FoobBar.Select(x => x);
var x = somefunction();
Compiler sagt: 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
.
Warum ist das so? Sollte die Variable Lambda nicht mehr existieren, wenn die LINQ-Abfrage endet?
EDIT: Nach dem Lesen der Antworten kam ich zu dem Ergebnis, dass es die Außenseite x
(von der Funktion zurückgegeben), deren Bereich innerhalb LINQ Query erstreckt.
Nach dem Lesen aller Antworten kam ich zu dem Schluss, dass es umgekehrt ist. Der Umfang der externen Variablen existiert in der LINQ-Abfrage. –
Und andersherum auch ;-) Eine Sprache wäre nicht refactoring-freundlich, wenn sie den Code kompilieren ließe, nur weil die widersprüchliche Variable ('var x = somefunction();') in der zweiten Zeile steht und dann Sie bewegen die zweite Zeile in der ersten Zeile, sehr zu Ihrem Verdruss, würde es nicht mehr kompilieren. C# macht einen Präventivmechanismus, es erlaubt 'var x = someFunction()' nicht, selbst in der zweiten Zeile zu kompilieren, da Sie den Code jederzeit neu Faktorisieren und später in die erste Zeile setzen können. Wir leben in einem Alter, in dem ein Refactoring-zugänglicher Code die Norm ist –