你的問題是在這裏:
// 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();
要理解爲什麼這是一個問題,考慮下面的代碼:
int n = 1000;
var evens = Enumerable.Range(1, 1000).Where(n => n % 2 == 0);
表達上述n % 2 == 0
是不明確的:這n
,我們談論的?如果我們談論的外n
,然後n % 2 == 0
是總是如此,因爲n
僅僅是1000(因此evens
將包括所有號碼從1到1000)。另一方面,如果我們在談論內部n
,那麼n % 2 == 0
將只對n
(和evens
將是2,4,6,... 1000)的偶數值保持爲真。
要實現的重要一點是,在lambda之外聲明的變量可以從lambda範圍內訪問。
int n = 0;
Action incrementN =() => n++; // accessing an outer variable
incrementN();
Console.WriteLine(n); // outputs '1'
這就是爲什麼存在不確定性,以及爲什麼它因此不允許的。
解決方法是簡單地爲您的lambda選擇一個不同的變量名;例如:
var ngt5 = numbers.Where(x => x > 5);
這段代碼的上下文是什麼? – SirPentor 2011-05-27 17:31:10
@Tobias:我修改了我的代碼 – 2011-05-27 17:33:24