关于c#闭包的一个问题

.Net技术 码拜 9年前 (2016-03-06) 828次浏览
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是怎么实现的
许多时候本人用它就是原因是懒得处理闭包

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于c#闭包的一个问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)