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;
}
參考資料
- ^ foreach、in (C# 參考). msdn.microsoft.com. [2015-10-16]. (原始內容存檔於2015-01-12).
- ^ The For-Each Loop. docs.oracle.com. [2015-10-16]. (原始內容存檔於2015-06-22).