Foreach循環

Foreach 循環(foreach loop)是計算機編程語言中的一種控制流程語句,通常用來循環遍歷數組集合中的元素。

程序示例

C#

以下代碼用於循環打印名稱為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

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++

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). 

參見