值类型struct在foreach中的陷阱

王朝学院·作者佚名  2016-05-20
窄屏简体版  字體: |||超大  

值类型struct在foreach中的陷阱最近踩了一个坑,为了优化代码,把class改为了struct,结果发现原来的初始化语句没有预期的运行,伪代码如下:

public struct A{ bool _isActive; public void Init(bool isActive) { _isActive = isActive; }}

public A[] _arrayA; //调用如下foreach A a in _arrayA){ a.Init();}

看着是能达到预期的,但实际上不是的。            在foreach里一般都会拷贝一个临时变量,不同的是,值类型,拷贝出来的是一个新的值类型,改变的也是这个新的值类型,并不是数组里的内容;但引用类型拷贝出来的还是引用了同一个内容的引用,所以使用新拷贝出来的引用所做的操作都会应用于我们期望的内容上。         所以,还是要使用for循环来替换foreach。    for (int i = 0; i < _arrayA.Length; i++){ _arrayA[i].Init();}

如果对这些想深入了解,推荐如下的文章:

http://stackoverflow.com/questions/5663783/in-net-using-foreach-to-iterate-an-instance-of-ienumerablevaluetype-will-c

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航