Vòng lặp foreach dùng để thực thi câu lệnh cho mỗi phần tử trong mảng hoặc collection. Khác với for, foreach không có biến chỉ số (index) - nó lặp trực tiếp qua các giá trị.
Ví dụ: Bubble Sort kết hợp foreach hiển thị
using System;
namespace BubbleSort
{
class MySort
{
static void Main(string[] args)
{
int[] arr = { 78, 55, 45, 98, 13 };
int temp;
// Bubble Sort
for (int j = 0; j <= arr.Length - 2; j++)
{
for (int i = 0; i <= arr.Length - 2; i++)
{
if (arr[i] > arr[i + 1])
{
temp = arr[i + 1];
arr[i + 1] = arr[i];
arr[i] = temp;
}
}
}
// Hiển thị bằng foreach
Console.WriteLine("Đã sắp xếp:");
foreach (int p in arr)
Console.Write(p + " ");
Console.Read();
}
}
}
Kết quả
Đã sắp xếp: 13 45 55 78 98
Đặc điểm foreach
- Chỉ đọc: Không thể gán giá trị cho biến lặp (
p = 10lỗi compile) - Không có index: Cần index thì dùng
forhoặc LINQSelect((v,i) => ...) - Hoạt động trên: Mảng, List, IEnumerable, ICollection
- An toàn: Tránh lỗi off-by-one, index out of range
Khi nào dùng foreach vs for
| Trường hợp | Khuyên dùng |
|---|---|
| Chỉ đọc, không cần index | foreach |
| Cần index, sửa đổi mảng | for |
| Lặp ngược, bước nhảy tùy chỉnh | for |
| LINQ query syntax | foreach |