国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

值類型struct在foreach中的陷阱

2019-11-17 02:25:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

值類型struct在foreach中的陷阱

最近踩了一個(gè)坑,為了優(yōu)化代碼,把class改為了struct,結(jié)果發(fā)現(xiàn)原來(lái)的初始化語(yǔ)句沒(méi)有預(yù)期的運(yùn)行,偽代碼如下:

public struct A{    bool _isActive;    public void Init(bool isActive)    {        _isActive = isActive;    }}
public A[] _arrayA; //調(diào)用如下foreach A a in _arrayA){    a.Init();}

看著是能達(dá)到預(yù)期的,但實(shí)際上不是的。            在foreach里一般都會(huì)拷貝一個(gè)臨時(shí)變量,不同的是,值類型,拷貝出來(lái)的是一個(gè)新的值類型,改變的也是這個(gè)新的值類型,并不是數(shù)組里的內(nèi)容;但引用類型拷貝出來(lái)的還是引用了同一個(gè)內(nèi)容的引用,所以使用新拷貝出來(lái)的引用所做的操作都會(huì)應(yīng)用于我們期望的內(nèi)容上。         所以,還是要使用for循環(huán)來(lái)替換foreach。   

for (int i = 0; i < _arrayA.Length; i++){    _arrayA[i].Init();}
如果對(duì)這些想深入了解,推薦如下的文章:

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 呼和浩特市| 玉环县| 堆龙德庆县| 阳春市| 崇信县| 萨嘎县| 樟树市| 大宁县| 荆门市| 衡阳县| 柞水县| 区。| 肃南| 长武县| 汉川市| 龙井市| 灵璧县| 花垣县| 抚州市| 郎溪县| 互助| 政和县| 新巴尔虎左旗| 芜湖县| 浦县| 泾川县| 金阳县| 秀山| 招远市| 河池市| 桐柏县| 日照市| 信丰县| 烟台市| 天水市| 莆田市| 邢台县| 翼城县| 霍邱县| 宁城县| 长岭县|