這裡體現出閉包的數據共用 這裡體現出閉包的局部變數升級為成員變數 (在拉姆達表達式生成的匿名類中不會不會隨著方法執行完後彈棧 而是隨著回調函數徹底執行完後才被回收) ...
這裡體現出閉包的數據共用
1 int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 2 3 int result1 = 0; 4 int result2 = 100; 5 values.ToList().ForEach(s => result1 += s); 6 values.ToList().ForEach(s => result2 -= s); 7 8 Console.WriteLine(result1);//輸出55 表示委托中計算的值是上下文中的數據(正常情況下如果用方法計算賦值給該方法的參數 會在棧中創建新的記憶體 然後把值複製過去 並不是原來的值) 9 Console.WriteLine(result2);//輸出45 同上 多函數共用上下文環境 方便了數據共用 10 11 Console.ReadKey();
這裡體現出閉包的局部變數升級為成員變數 (在拉姆達表達式生成的匿名類中不會不會隨著方法執行完後彈棧 而是隨著回調函數徹底執行完後才被回收)
IList<Action> list = new List<Action>(); for (int i = 0; i < 5; i++) { list.Add(() => Console.WriteLine(i)); } list.ToList().ForEach(s => s()); //本該被回收的i變數卻還被列印出來了 Console.ReadKey();