程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 值類型struct在foreach中的陷阱,structforeach

值類型struct在foreach中的陷阱,structforeach

編輯:C#入門知識

值類型struct在foreach中的陷阱,structforeach


最近踩了一個坑,為了優化代碼,把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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved