《隨筆十三》——C#中的 “ foreach 語句”
阿新 • • 發佈:2018-11-24
目錄
● foreach 語句允許我們依次訪問某個序列中的元素,並且不存在訪問非法元素的危險。 不需要考慮該序列中有多少個元素, 並可以確保將在迴圈中使用每個元素。 語法為:
foreach (Type Indentifier in ArrayName)
{
//Satement
}
或者
foreach (var Indentifier in ArrayName)
{
//Satement
}
迭代變數是臨時的, 並且和陣列中的元素的型別相同。● 注意: 每次迭代都會重新定義迭代變數,Identifier部分的變數會被初始化為 ArrayName 部分的下一個元素的值(或者說: 並將其初始化序列中的下一個值)。
然後執行語句主體,在該主體中,我們可以把迭代變數作為序列中的元素只讀別名。
在主體執行之後, foreach 語句 選擇該序列中的下一個元素並重復處理。
迭代變數是隻讀的
對於值型別陣列, 我們在用迭代變量表示陣列元素的時候, 我們不能改變它:
int[] arr = { 0, 1, 2, 3 };
foreach(var tt in arr)
{
++tt; //錯誤,不能改變迭代變數的值
}
對於引用型別陣列,我們也不能該變迭代變數, 但是迭代變數只是儲存了資料的引用, 而不是資料本身。 因此,我們雖然不能改變引用,但是我們可以通過迭代變數改變引用的資料。
namespace HelloWorld_Console { class MyClass { public int MyField = 0; } class Program { static void Main(string[] args) { MyClass[] mcArray = new MyClass[4]; for (int i = 0; i < mcArray.Length; ++i) { mcArray[i] = new MyClass(); // 建立類物件 mcArray[i].MyField = i; // 建立欄位 } foreach (MyClass item in mcArray) { item.MyField += 10; WriteLine(item.MyField); } ReadKey(); } } } 輸出結果為: 10 11 12 13
交錯陣列使用foreach 迴圈
一個交錯陣列是陣列的陣列, 我們必須為交錯陣列中的每一個維度使用獨立的foreach 語句。 foreach 語句必須巢狀以確保每一個巢狀陣列都被正確處理。
int[][] myInt = new int[3][] { new int[] { 1, 2, 3 }, new int[] { 1 }, new int[] { 1, 2 } }; //正確
foreach (int[] divisor in myInt) //處理頂層陣列
{
foreach (int temp in divisor) //處理第子陣列
{
WriteLine(temp);
}
}
在該程式碼中, 第一個foreach 語句遍歷了頂層陣列 myInt 第一個子陣列, 內部的foreach語句處理了子陣列的,每一個元素。