集合遍歷:for VS foreach
阿新 • • 發佈:2019-01-26
假設我們擁有下面的集合
1 System.Collections.ArrayList list =new System.Collections.ArrayList();
2 list.Add(1);
3 list.Add(12);
4 list.Add(3);
5 list.Add(56);
2 for (int i =1; i < list.Count;i++ )
3 {
4 tmp += (int)list[i];
5 }6
7 System.Console.WriteLine(tmp);
2
3 foreach (int i in list) //指定型別int
4 {
5 tmp += i;
6 } 7 System.Console.WriteLine(tmp);
[] { 1, 2, 3, 4, 5, 6, 7, 8 };
2 for (int i =0; i <= iarr.Length -1; i++)
3 {
4 System.Console.WriteLine(iarr[i]++);
5 }
2 foreach (int i in iarr)
3 {
4 //i是一個迭代變數,無法為它賦值 5 System.Console.WriteLine(i++);
6 }
就會報錯
i是一個迭代變數,無法為它賦值
切記切記
1 System.Collections.ArrayList list =new System.Collections.ArrayList();
2 list.Add(1);
3 list.Add(12);
4 list.Add(3);
5 list.Add(56);
現在我們要遍歷這個集合,我們有兩套方案
1、我們用for遍歷
2 for (int i =1; i < list.Count;i++ )
3
4 tmp += (int)list[i];
5 }6
7 System.Console.WriteLine(tmp);
使用for遍歷,我們可以控制對集合中的區域性資料進行遍歷。但是,從ArrayList中獲取的資料要進行顯示的資料型別轉換。
2、我們使用foreach遍歷
2
3 foreach (int i in list) //指定型別int
4 {
5 tmp += i;
6 }
使用foreach將自動迭代每個集合中的元素,且使用foreach表示式中指定的型別進行自動轉換。不必顯示轉換。
當需要迭代集合中所有元素且不關心先後次序時,建議使用foreach。因為大部分情況下在處理集合時,初始值和最終值的概念沒有意義,而且你也不必知道集合中包含多少元素。
不過,當你需要將迴圈的每次迭代與控制變數相關聯並可確定該變數的初始值和最終值時,那就用for,比如你需要明確知道元素在集合中的位置時。
除了上面的不同外,for和foreach還有一個很大的不同
2 for (int i =0; i <= iarr.Length -1; i++)
3 {
4 System.Console.WriteLine(iarr[i]++);
5 }
輸出的結果是
1
2
3
4
5
6
7
8
但是
2 foreach (int i in iarr)
3 {
4 //i是一個迭代變數,無法為它賦值 5 System.Console.WriteLine(i++);
6 }
就會報錯
i是一個迭代變數,無法為它賦值
切記切記