Foreach 迴圈(foreach loop)是電腦程式語言中的一種控制流程語句,通常用來迴圈遍歷陣列集合中的元素。

程式範例

編輯

以下代碼用於迴圈列印名稱為myArray的整型陣列中的每個元素。[1]

foreach (int x in myArray)
{
  Console.WriteLine(x);
}

C#不允許在foreach迴圈中改變陣列或集合中元素的值(註:成員的值不受影響),如以下代碼將無法通過編譯。

foreach (int x in myArray)
{
  x++; //错误代码,因为改变了元素的值
  Console.WriteLine(x);
}

如果要讓自訂的資料類型支援foreach迴圈,則該類型必須實現IEnumerable<T>介面,且存在對應此列表的IEnumerator<T>實現。 實際上,在.Net的底層(IL語言層面)而言,

foreach (var x in list) // x的类型为T
{ 
  ...
}

等價於如下代碼:

using (var iterator = list.GetEnumerator()) // iterator的类型为IEnumerator<T>
{
  while ( iterator.MoveNext() ) 
  {
    var x = iterator.Current();
    ... // 本段代码中禁止修改x的值——编译器会报错
  }
}

它只是為了讓使用者更加易於使用的等價描述形式。

Java語言從JDK 1.5.0開始引入foreach迴圈。[2]

以下代碼用於迴圈列印myArray陣列中的每個元素,java中的foreach迴圈使用for關鍵字,而非foreach

for (int x : myArray){
  System.out.println(x);
}

與C#不同的是,Java中執行以下代碼不會編譯出錯,但是實際陣列中的元素不會被修改。

for (int x : myArray){
  x++; 
 System.out.println(x);
}

C++11擴展for的用法,增加了foreach功能,語法和Java一樣。

for (int x : myArray){
  cout << x << endl;
}

同時也有C++求值策略的功能,可以傳參考。

for (int& x : myArray){
  x = x * x;
}
for (int x : myArray){
  cout << x << endl;
}

參考資料

編輯
  1. ^ foreach、in (C# 參考). msdn.microsoft.com. [2015-10-16]. (原始內容存檔於2015-01-12). 
  2. ^ The For-Each Loop. docs.oracle.com. [2015-10-16]. (原始內容存檔於2015-06-22). 

參見

編輯