語法結構
while (boolean_expression)
statement;
// 區塊形式
while (condition) {
// 多行陳述式
}
執行流程
- 評估
boolean_expression
true → 執行 statement,回步驟 1
false → 結束迴圈
基礎範例:陣列搜尋
int Find(int value, int[] array)
{
int i = 0;
while (i < array.Length && array[i] != value)
i++;
return i < array.Length ? i : -1;
}
break / continue 控制
// 計算階乘 (break 跳出)
long result = 1;
int n = 5;
while (true)
{
result *= n;
n--;
if (n == 0) break;
}
// 處理佇列項目 (continue 略過無效)
while (queue.Count > 0)
{
var item = queue.Dequeue();
if (!item.IsValid) continue;
Process(item);
}
無限迴圈模式
// 模式 1:while (true) + break
while (true) { if (done) break; }
// 模式 2:while (condition) 條件在內部變更
while (stream.CanRead) { var data = stream.Read(); }
// 模式 3:迭代器模式 (C# 8.0+)
await foreach (var item in channel.ReadAllAsync()) { ... }
while vs for vs foreach 選擇指南
| 場景 | 推薦 | 理由 |
| 已知次數/需索引 | for | 索引可控、三區塊清晰 |
| 集合遍歷/唯讀 | foreach | 語意清晰、無索引錯誤 |
| 條件複雜/次數未知/至少一次 | while / do-while | 靈活條件控制 |
| 非同步串流 | await foreach | 原生非同步支援 |
常見陷阱
- 條件永真:忘記更新條件變數 → 無限迴圈
- 修改集合:
while 中 list.Remove 可能導致索引錯亂,改用反向 for 或 List.RemoveAll
- 空迴圈體:
while (condition) ; 易誤讀,建議加大括號或註解
總結
while 是最基礎的前測試迴圈,適用於迭代次數未知、條件複雜的場景。搭配 break/continue 實現靈活流程控制。選擇迴圈類型時,優先考慮語意表達力:foreach > for > while > do-while。
- 上一篇文章: C# do-while 迴圈:至少執行一次的後測試迴圈語法與應用
- 下一篇文章: C# 條件語句:if-else 分支與 switch 多路選擇完整指南
Copyright ©
程式碼之家 All Rights Reserved