栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何告诉Lambda函数捕获副本而不是C#中的引用?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何告诉Lambda函数捕获副本而不是C#中的引用?

编译器正在做的是将您的lambda和lambda捕获的任何变量拉入编译器生成的嵌套类。

编译后,您的示例如下所示:

class Program{        delegate void Action();        static void Main(string[] args)        {     List<Action> actions = new List<Action>();     DisplayClass1 displayClass1 = new DisplayClass1();     for (displayClass1.i = 0; displayClass1.i < 10; ++displayClass1.i )  actions.Add(new Action(displayClass1.Lambda));     foreach (Action a in actions)  a();        }        class DisplayClass1        {     int i;     void Lambda()     {  Console.WriteLine(i);     }        }}

通过在for循环中进行复制,编译器将在每次迭代中生成新对象,如下所示:

for (int i = 0; i < 10; ++i){    DisplayClass1 displayClass1 = new DisplayClass1();    displayClass1.i = i;    actions.Add(new Action(displayClass1.Lambda));}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442751.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号