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     }

由循环的初始部分声明的变量只被实例化一
次。这很容易弄错!如果你想捕获循环变量在一次特定的循环迭代中的值,必须在循环内部引入
另一个变量,并将循环变量的值复制给它,再捕捉那个新变量

猜你喜欢

转载自www.cnblogs.com/kikyoqiang/p/10012920.html
5.5
今日推荐