Skip to content

C# - Continue语句

C# 中的 continue 语句提供了一种方法,可以立即停止循环的当前迭代并进入下一次迭代。与终止整个循环的 break 语句不同,continue 只会跳过当前迭代中剩余的代码。

其行为取决于循环类型:

  • 在 for 循环中,它会跳转到循环的增量表达式(i++)。
  • 在 while 或 do...while 循环中,它会跳转到循环的条件检查。

continue 语句的语法很简单:

continue;

您可以按如下方式,将带有 continue 语句的循环流程可视化:

( 循环开始 )
|
v
+---------------+
| 循环条件 |----(false)---->( 循环结束 )
+---------------+
|
(true)
|
v
+---------------------------------+
| 循环体代码 #1 |
+---------------------------------+
|
v
+-----------------+
| if (条件) |----(true)----> (跳转到下一次迭代)
+-----------------+ (跳过下方代码)
|
(false)
|
v
+---------------------------------+
| 循环体代码 #2 |
+---------------------------------+
|
v
(跳转到下一次迭代)

一个常见的用例是只处理符合特定条件的项。在此示例中,我们使用 continue 来跳过偶数,只打印奇数。

// 目标:打印从 1 到 10 的所有奇数。
for (int i = 1; i <= 10; i++)
{
// 如果数字是偶数,则跳过本次迭代的其余部分。
if (i % 2 == 0)
{
continue; // 继续下一次 i 的值。
}
// 只有奇数才会执行到这一行。
Console.WriteLine($"Odd number: {i}");
}
Console.WriteLine("循环完成。");
Odd number: 1
Odd number: 3
Odd number: 5
Odd number: 7
Odd number: 9
Loop completed.

在 while 或 do...while 循环中使用 continue 时,至关重要的是要确保在 continue 语句之前更新循环的控制变量,以避免无限循环。

// 目标:打印从 10 到 19 的数字,但跳过 15。
int a = 10;
while (a < 20)
{
if (a == 15)
{
// 重要提示:在执行 continue *之前* 递增 'a'。
// 否则,'a' 将始终为 15,循环将永不结束。
a++;
continue;
}
Console.WriteLine($"Value of a: {a}");
a++;
}
Value of a: 10
Value of a: 11
Value of a: 12
Value of a: 13
Value of a: 14
Value of a: 16
Value of a: 17
Value of a: 18
Value of a: 19
  • 提高可读性:continue 有时可以使代码比深度嵌套的 if 语句更简洁。如果跳过的条件很简单,将 continue 放在循环顶部可以简化逻辑。
  • 无限循环陷阱:最常见的错误是创建无限循环。在 while 和 do-while 循环中,务必确保在调用 continue 之前修改控制循环退出条件的变量。
  • foreach 循环:continue 与 foreach 循环无缝协作,使其成为在迭代期间过滤集合的绝佳工具。
var inputs = new List<string> { "apple", "", "banana", "-1", "cherry" };
var validFruits = new List<string>();
foreach (var input in inputs)
{
// 跳过空或无效的输入
if (string.IsNullOrEmpty(input) || input == "-1")
{
Console.WriteLine($"跳过无效输入:'{input}'");
continue;
}
Console.WriteLine($"正在处理有效水果:{input}");
validFruits.Add(input.ToUpper());
}
Console.WriteLine($"\n已处理的有效水果:{string.Join(", ", validFruits)}");
Processing valid fruit: apple
Skipping invalid input: ''
Processing valid fruit: banana
Skipping invalid input: '-1'
Processing valid fruit: cherry
Valid fruits processed: APPLE, BANANA, CHERRY