1. 程式人生 > >5.5 匿名方法中的捕獲變數

5.5 匿名方法中的捕獲變數

    class Program
    {
        static void Main(string[] args)
        {
            MethodInvoker m = CreateInvoker();
            m();
            m();

            Console.ReadKey();
        }
        static MethodInvoker CreateInvoker()
        {
            int count = 5;
            MethodInvoker ret 
= delegate { Console.WriteLine(count); count++; }; ret(); return ret; } }

 5.5.5 區域性變數例項化

使用多個委託來捕捉多個變數例項

 1     class Program
 2     {
 3         static void Main(string[] args)
4 { 5 List<MethodInvoker> list = new List<MethodInvoker>(); 6 for (int i = 0; i < 5; i++) 7 { 8 int a = i * 10; 9 list.Add(()=> 10 { 11 Console.WriteLine(a);
12 a++; 13 }); 14 } 15 16 Console.WriteLine("list======================"); 17 foreach (var item in list) 18 { 19 item(); 20 } 21 22 Console.WriteLine("list[0]======================"); 23 list[0](); 24 list[0](); 25 list[0](); 26 27 Console.WriteLine("list[1]======================"); 28 list[1](); 29 30 Console.ReadKey(); 31 32 /* 33 list====================== 34 0 35 10 36 20 37 30 38 40 39 list[0]====================== 40 1 41 2 42 3 43 list[1]====================== 44 11 45 */ 46 } 47 }

由迴圈的初始部分宣告的變數只被例項化一
次。這很容易弄錯!如果你想捕獲迴圈變數在一次特定的迴圈迭代中的值,必須在迴圈內部引入
另一個變數,並將迴圈變數的值複製給它,再捕捉那個新變數