Su problema está aquí:
// 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();
Para entender por qué esto es un problema, considere el siguiente código:
int n = 1000;
var evens = Enumerable.Range(1, 1000).Where(n => n % 2 == 0);
La expresión n % 2 == 0
anterior es ambigua: el que n
estamos hablando? Si estamos hablando de la exteriorn
, entonces n % 2 == 0
es siempre cierto, ya que es sólo n
1000 (y por lo tanto evens
comprenderá todos los números del 1 al 1000). Por otro lado, si estamos hablando de innern
, entonces n % 2 == 0
solo será válido para valores pares de n
(y evens
serán 2, 4, 6, ... 1000).
El punto importante a tener en cuenta es que las variables declaradas fuera de lambda son accesibles desde el alcance de lambda.
int n = 0;
Action incrementN =() => n++; // accessing an outer variable
incrementN();
Console.WriteLine(n); // outputs '1'
Esto es por qué existe la ambigüedad, y por lo tanto no está permitido.
La solución es simplemente elegir un nombre de variable diferente para su lambda; e.g .:
var ngt5 = numbers.Where(x => x > 5);
¿Cuál es el contexto de este código? – SirPentor
@Tobias: He modificado mi código –