Votre problème est ici:
// Within your lambda you have an 'n'.
var ngt5 = numbers.Where(n => n > 5);
// And within the outer scope you also have an 'n'.
var n = ngt5.First().ToString();
Pour comprendre pourquoi il en est un problème, considérez le code suivant:
int n = 1000;
var evens = Enumerable.Range(1, 1000).Where(n => n % 2 == 0);
L'expression n % 2 == 0
ci-dessus est ambiguë: qui n
-nous parlons? Si nous parlons de la externen
, puis n % 2 == 0
est toujours vrai que n
est juste 1000 (et donc evens
comprendra tous les nombres de 1 à 1000). D'un autre côté, si nous parlons du intérieurn
, alors n % 2 == 0
ne sera vrai que pour les valeurs paires de n
(et evens
sera 2, 4, 6, ... 1000).
Le point important à réaliser est que les variables déclarées en dehors du lambda sont accessibles depuis l'intérieur du lambda.
int n = 0;
Action incrementN =() => n++; // accessing an outer variable
incrementN();
Console.WriteLine(n); // outputs '1'
C'est pourquoi l'ambiguïté existe, et pourquoi elle n'est donc pas autorisée.
La solution est simplement de choisir un nom de variable différent pour votre lambda; par exemple:
var ngt5 = numbers.Where(x => x > 5);
Quel est le contexte de ce code? – SirPentor
@Tobias: J'ai modifié mon code –