C# 循环(Loops)结构
本章节重点关于讲解 C# 循环(Loops)结构,涵盖:
- 各类循环语法与使用场景
- 示例代码与注意事项
- 官方文档参考链接
- 多种实现方式(如
for,while,foreach,do...while) - 易错点与最佳实践
📚 官方权威链接(信息均来自 Microsoft 官方文档):
🔗 C# Iteration Statements (loops) – Microsoft Docs
一、C# 支持的循环结构
| 循环类型 | 语法关键字 | 典型使用场景 |
|---|---|---|
for | for | 已知循环次数,索引迭代 |
while | while | 不确定循环次数,条件先判断 |
do-while | do...while | 不确定循环次数,但至少执行一次 |
foreach | foreach | 用于遍历数组、集合、列表等可枚举对象 |
二、各类型循环详解
1️⃣ for 循环
用于已知迭代次数的循环,语法简洁,适合数组索引访问。
for (int i = 0; i < 5; i++) {
Console.WriteLine($"第 {i} 次循环");
}
📌 结构:初始化;条件判断;每轮循环后的表达式。
2️⃣ while 循环
先判断条件,再决定是否执行。适用于用户输入、数据流等不确定条件。
int i = 0;
while (i < 5) {
Console.WriteLine(i);
i++;
}
📌 注意:循环体内必须改变条件变量,避免死循环。
3️⃣ do...while 循环
与 while 类似,但先执行一次循环体,再判断条件。
int i = 0;
do {
Console.WriteLine(i);
i++;
} while (i < 5);
📌 适用场景:至少需要执行一次的逻辑,如“输入验证”。
4️⃣ foreach 循环
用于遍历集合、数组、列表,语法安全,避免越界。
string[] names = { "Alice", "Bob", "Charlie" };
foreach (string name in names) {
Console.WriteLine(name);
}
📌 不支持索引访问或修改元素内容(只读遍历)。
三、循环控制语句
| 关键字 | 功能说明 | 示例 |
|---|---|---|
break | 跳出当前循环 | if (x > 5) break; |
continue | 跳过当前循环中的剩余语句,进入下一轮 | if (x % 2 == 0) continue; |
return | 终止方法执行,直接返回 | return; |
四、嵌套循环
循环中可嵌套其他循环,如输出九九乘法表:
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
Console.Write($"{j}×{i}={i * j}\t");
}
Console.WriteLine();
}
五、foreach vs for
| 对比点 | for | foreach |
|---|---|---|
| 是否可修改元素 | ✅ 是 | ❌ 不可 |
| 是否有索引 | ✅ 有 | ❌ 无 |
| 安全性 | 易出错(如越界) | 更安全 |
| 使用场景 | 精确控制循环(如跳跃访问) | 简洁遍历集合 |
六、常见误区 & 最佳实践
| ⚠️ 常见错误 | ✅ 建议写法或说明 |
|---|---|
| 死循环 | 确保循环中条件变量被正确更新 |
foreach 中修改集合元素 | 不允许,需使用 for 替代 |
未加 {} 导致逻辑错误 | 永远使用 {} 包裹循环体,哪怕只有一行 |
| 滥用嵌套循环效率低下 | 尽量简化嵌套层级,必要时考虑使用 yield return |
| 不规范命名或注释混乱 | 养成注释和清晰命名的习惯,提升代码可读性 |
七、高级技巧与拓展用法
🔹 Enumerable.Range + foreach
foreach (var i in Enumerable.Range(0, 5)) {
Console.WriteLine(i);
}
🔹 Parallel.For 并行循环(需引入 System.Threading.Tasks)
Parallel.For(0, 10, i => {
Console.WriteLine($"线程 {Thread.CurrentThread.ManagedThreadId}:{i}");
});
八、推荐阅读与参考资料
更多详细内容,请关注其他相关文章!