国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 涟源市| 左云县| 濮阳市| 高青县| 漳平市| 武邑县| 内乡县| 京山县| 酒泉市| 正阳县| 江川县| 额尔古纳市| 吴川市| 福海县| 阳春市| 兴仁县| 应用必备| 阜宁县| 晋中市| 长子县| 城固县| 简阳市| 栾川县| 昔阳县| 贵溪市| 连南| 桂阳县| 金山区| 永平县| 四平市| 武穴市| 光泽县| 曲沃县| 青海省| 盐边县| 从江县| 林口县| 泽州县| 宿州市| 宜君县| 绥中县|