原副标题:C#旋量群的圈套
1、甚么是旋量群?
旋量群最早已开始在JS再次出现的较为多,原意是“透过一系方式,将表达式外部的表达式(局部表达式)转化成为全局表达式。”只不过C#也有旋量群的基本概念:外层的表达式能提及包涵在它外层的表达式的变量,即便外层表达式的继续执行早已中止。但该表达式提供更多的值绝非表达式建立时的值,而要在父表达式范围内的最后值。说得称奇,他们上面具体内容范例看一看。
2、圈套
查阅如下表所示标识符
{ Action[] act = newAction[6]; for( vari = 0; i < act.Length; i++) { act[i] = => { stringstr = “dotnet合作开发挖角”+i; Console.WriteLine(str); }; } foreach ( varitem inact) { item; } }输入结论:
怎么会输入“ dotnet合作开发挖角6”呢?这就是旋量群带来的问题。
3、为啥会这样?
在for循环中,只能有一个 i 表达式。即在第一次循环时,i 的地址就分配好了,不会因为循环次数的多少而发生任何改变,其改变的只能是里面装载的值。当使用匿名方式时传进去的是表达式的地址,不是具体内容值。只有当真正继续执行这个匿名方式时,才会去确定它的值。这就是为甚么上面的范例中,其结论均为“dotnet合作开发挖角6”。
4、怎么避免旋量群圈套
在for循环中增加一个临时表达式t,用来替换i,这时候每次循环编译器会对这个t重新分配内存,就不会再次出现这个问题了。标识符如下表所示:
{ Action[] act = newAction[ 6]; for( vari = 0; i < act.Length; i++) { intt = i; act[i] = => { stringstr = “dotnet合作开发挖角”+ t; Console.WriteLine(str); }; } foreach( varitem inact) { item; } }5、旋量群的优点
旋量群的存在也不是没有意义,在winform合作开发中,使用旋量群中能轻松的访问外层表达式定义的表达式。winform的合作开发者能试一试。
关注公众号: DotNet合作开发挖角
觉得不错,请点个在看 呀