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