Perché il mio parametro x
si comporta in modo errato?Chiarimento Lambda
- Esempio 1: non esiste nel contesto corrente.
- Esempio 2: impossibile riutilizzare
x
perché è definito in un ambito "figlio". - Esempio 3 - Fine. Questa è la parte in cui sono confuso. Forse una portata "infantile" diversa?
Esempio 1:
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
var result = list.Where(x => x < 3);
Console.Write(result.ElementAt(x));
crea questo errore di compilazione:
The name 'x' does not exist in the current context
che mi aspetto.
Esempio 2:
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
var result = list.Where(x => x < 3);
int x = 1;
Console.Write(result.ElementAt(x));
produce questo errore di compilazione:
A local variable named '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
Capisco la scoping come risposta a questa domanda, Is there a reason for C#'s reuse of the variable in a foreach?. Tuttavia, questo è qualcosa che non ho mai visto prima. Inoltre, rende le risposte a questa domanda, What is the scope of a lambda variable in C#?, incomplete o errate.
Esempio 3:
List<int> list = new List<int> { 1, 2, 3, 4, 5 };
List<string> stringList = new List<string> { "A", "B" };
var result = list.Where(x => x < 3);
var result2 = stringList.Where(x => x != "A");
Console.Write(result2);
Nessun errore prodotte.
Con la risposta accettata, questi post di blog di Eric Lippert mi hanno aiutato a comprendere ciò che stava accadendo. Se qualcuno è ancora confuso:
[qui] (http://blogs.msdn.com/b/ericlippert/archive/2009/11/02 /simple-names-are-not-so-simple.aspx) sono due link [rilevanti] (http://blogs.msdn.com/b/ericlippert/archive/2009/11/05/simple-names-are- not-so-simple-part-two.aspx) sull'argomento. – Servy
possibile duplicato di [ambito variabile locale nel metodo linq anonimo (chiusura)] (http://stackoverflow.com/questions/10517964/local-variable-scope-in-linq-anonymous-method-closure) – Magnus
possibile duplicato di [ Qual è lo scopo di una variabile lambda in C#?] (Http://stackoverflow.com/questions/10494074/what-is-the-scope-of-a-lambda-variable-in-c) – nawfal