Ho letto questa domanda (What is the scope of a lambda variable in C#?)Perché l'ambito variabile Lambda esiste all'esterno di LINQ Query?
Ma si tratta dello scope variabile di Lambda all'interno di LINQ Query.
Ora alla mia domanda
Diciamo che ho una semplice query LINQ.
var Foo = FoobBar.Select(x => x);
var x = somefunction();
compilatore 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
.
Perché è così? La variabile Lambda non dovrebbe cessare di esistere quando termina la query LINQ?
EDIT: Dopo le risposte di lettura sono arrivato a concludere che la sua parte esterna x
(tornato dalla funzione) il cui ambito si estende all'interno LINQ Query.
Dopo aver letto tutte le risposte sono giunto alla conclusione che è il contrario. l'ambito della variabile esterna esiste all'interno della query LINQ. –
E viceversa ;-) Una lingua non sarebbe priva di refactoring-friendly se consentisse la compilazione del codice solo perché la variabile in conflitto ('var x = somefunction();') si trova sulla seconda riga, e quindi quando si sposta la seconda riga in prima linea, con grande dispiacere, non si compilerebbe più. C# esegue un meccanismo di pre-emptive, non consente a 'var x = someFunction()' di compilare anche se è in seconda linea, in quanto è possibile ridimensionare il codice in qualsiasi momento e metterlo in prima linea in seguito. Viviamo in un'epoca in cui un codice suscettibile di refactoring è la norma –