当前位置: 首页 > news >正文

网站代码优化方案网站建设和编程的区别

网站代码优化方案,网站建设和编程的区别,餐饮公司介绍模板,网站建设与维护教程一、问题描述:比如有这样的代码:它的输出结果是 3,3,3。通过搜索得知这一现象是因为C#闭包导致的.我们借助ILSpy看下IL中间代码,首先它生成了一个名叫DisplayClass的类,类中定义了i的字段主代码&#xff1a…

一、问题描述:

比如有这样的代码:

它的输出结果是 3,3,3。

通过搜索得知这一现象是因为C#闭包导致的.

我们借助ILSpy看下IL中间代码,首先它生成了一个名叫DisplayClass的类,类中定义了i的字段

主代码:

在for循环外,定义了DisplayClass的实例,并且对DisplayClass.i进行赋值

其次看下i++实现,是针对DisplayClass.i进行了自增操作。

我们可以对这段代码再进行AI翻译,所以最终执行输出的a.i是最新值3

var actions = new List<Action>(); 
DisplayClass a=new DisplayClass();
a.i=0;
while(a.i<3){actions.Add(() => Console.WriteLine(a.i));a.i=a.i+1;
}

二、解决方式

解决闭包也很简单,就是用局部变量进行赋值

我们再反编译分析下原理

它是在for循环里面生成的DisplayClass的实例,相当于每循环一次都会生成一次实例,那么匿名函数持有的是局部变量DisplayClass实例,所以就能输出正确的值。

总结:

匿名函数引用外部变量i,会在定义变量i的时候实例化一个DisplayClass类,类中声明了i的字段。

1.如果是引用的循环体外的变量,那么每个匿名函数都持有的同一个DisplayClass实例,会导致输出的结果都是最新的值。

2.如果是引用的循环体内的变量,那么每个匿名函数都持有与之对应的DisplayClass实例,能保证值输出正确,但也会带来相应的GC开销。

http://www.dtcms.com/a/507853.html

相关文章:

  • 重庆建设工程造价管理协会网站直播网站开发价格
  • 【Nest】集成测试
  • ELK运维之路(Logstash基础使用-7.17.24)
  • 快速排序(JAVA详细讲解快速排序的四种方式)
  • 数据结构四大简单排序算法详解:直接插入排序、选择排序、基数排序和冒泡排序
  • 官渡网站建设wordpress单页面制作
  • 企业电子商务网站开发数据库设计昆明seo博客
  • 东道 网站建设erp系统哪家做得好
  • 现代 Web 开发中检测用户离开页面的完整方案(附 Vue 实现)
  • [crackme]029-figugegl.1
  • 网站建站分辨率腾讯企点怎么注册
  • 第四章:L2CAP 的“数据语言”——揭秘蓝牙通信的报文格式
  • 【代码随想录算法训练营——Day43(Day42周日休息)】动态规划——300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组
  • block的样式有哪些?如果copy的话分别会有啥样式
  • 如何做网络投票网站大数据开发工程师
  • 提示词 prompt 快速上手
  • 网站降权查询工具lnmp中安装wordpress
  • 一个空间放两个网站蓟门桥网站建设
  • DPC和DPC-KNN算法
  • git中tag标签远程管理
  • Babylon.js UtilityLayerRenderer 深度解析:创建3D工具与调试层的完整指南
  • 如何制造一个网站网站的图片怎么更换
  • 区块链安全评估:守护数字世界的“安全密码”
  • 多语言网站建设公司教你做企业网站
  • 第19节-非规范化数据类型-Drop-Type
  • docker desktop的容器间通信
  • 宝安做网站的公司企业文化经典句子
  • 学校二级网站建设百度关键词优化怎么做
  • 百度前端面试准备
  • 立创EDA学习(一、新建项目与自定义元件)