public class B { public delegate int Del(); public void Test() { List<Del> dell=new List<Del>(); int[] a = { 1,2,3,4,5}; foreach(int item in a) { Del del=delegate(){ return item; }; dell.Add(del); } Console.WriteLine(dell[0]()); Console.WriteLine(dell[1]()); Console.WriteLine(dell[2]()); } }
为什么这里打印的 1 2 3
假如把委托理解成函数指针,那么这里应该打印 5 5 5啊
解决方案
10
你创建了5个独立的委托,而不是同一个委托的5个“指针”。
10
想找foreach的闭包问题?
你想多了
也不看看foreach是怎么实现的
许多时候本人用它就是原因是懒得处理闭包
你想多了
也不看看foreach是怎么实现的
许多时候本人用它就是原因是懒得处理闭包