添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

if 、 if-else 和 switch 语句根据表达式的值从多个可能的语句选择要执行的路径。 仅当提供的布尔表达式的计算结果为 true 时, if , if 语句 才执行语句。 语句 if-else 允许你根据布尔表达式选择要遵循的两个代码路径中的哪一个。 switch 语句 根据与表达式匹配的模式来选择要执行的语句列表。

if 语句

if 语句可采用以下两种形式中的任一种:

  • 包含 else 部分的 if 语句根据布尔表达式的值选择两个语句中的一个来执行,如以下示例所示:

    DisplayWeatherReport(15.0); // Output: Cold. DisplayWeatherReport(24.0); // Output: Perfect! void DisplayWeatherReport(double tempInCelsius) if (tempInCelsius < 20.0) Console.WriteLine("Cold."); Console.WriteLine("Perfect!");
  • 不包含 else 部分的 if 语句仅在布尔表达式计算结果为 true 时执行其主体,如以下示例所示:

    DisplayMeasurement(45); // Output: The measurement value is 45 DisplayMeasurement(-3); // Output: Warning: not acceptable value! The measurement value is -3 void DisplayMeasurement(double value) if (value < 0 || value > 100) Console.Write("Warning: not acceptable value! "); Console.WriteLine($"The measurement value is {value}");

    可嵌套 if 语句来检查多个条件,如以下示例所示:

    DisplayCharacter('f'); // Output: A lowercase letter: f DisplayCharacter('R'); // Output: An uppercase letter: R DisplayCharacter('8'); // Output: A digit: 8 DisplayCharacter(','); // Output: Not alphanumeric character: , void DisplayCharacter(char ch) if (char.IsUpper(ch)) Console.WriteLine($"An uppercase letter: {ch}"); else if (char.IsLower(ch)) Console.WriteLine($"A lowercase letter: {ch}"); else if (char.IsDigit(ch)) Console.WriteLine($"A digit: {ch}"); Console.WriteLine($"Not alphanumeric character: {ch}");

    在表达式上下文中,可使用 条件运算符 ?: 根据布尔表达式的值计算两个表达式中的一个。

    switch 语句

    switch 语句根据与匹配表达式匹配的模式来选择要执行的语句列表,如以下示例所示:

    DisplayMeasurement(-4); // Output: Measured value is -4; too low. DisplayMeasurement(5); // Output: Measured value is 5. DisplayMeasurement(30); // Output: Measured value is 30; too high. DisplayMeasurement(double.NaN); // Output: Failed measurement. void DisplayMeasurement(double measurement) switch (measurement) case < 0.0: Console.WriteLine($"Measured value is {measurement}; too low."); break; case > 15.0: Console.WriteLine($"Measured value is {measurement}; too high."); break; case double.NaN: Console.WriteLine("Failed measurement."); break; default: Console.WriteLine($"Measured value is {measurement}."); break;

    在上述示例中, switch 语句使用以下模式:

  • 关系模式 (在 C# 9.0 及更高版本中可用):将表达式结果与常量进行比较。
  • 常量模式 :测试表达式结果是否等于常量。
  • 有关 switch 语句支持的模式的信息,请参阅 模式 。

    上述示例还展示了 default case。 default case 指定匹配表达式与其他任何 case 模式都不匹配时要执行的语句。 如果匹配表达式与任何 case 模式都不匹配,且没有 default case,控制就会贯穿 switch 语句。

    switch 语句执行第一个 switch 部分中的语句列表,其 case 模式与匹配表达式匹配,并且它的 case guard (如果存在)求值为 true 。 switch 语句按文本顺序从上到下对 case 模式求值。 编译器在 switch 语句包含无法访问的 case 时会生成错误。 这种 case 已由大写字母处理或其模式无法匹配。

    default case 可以在 switch 语句的任何位置出现。 无论其位置如何,仅当所有其他事例模式都不匹配或 goto default; 语句在其中一个 switch 节中执行时, default 才会计算事例。

    可以为 switch 语句的一部分指定多个 case 模式,如以下示例所示:

    DisplayMeasurement(-4); // Output: Measured value is -4; out of an acceptable range. DisplayMeasurement(50); // Output: Measured value is 50. DisplayMeasurement(132); // Output: Measured value is 132; out of an acceptable range. void DisplayMeasurement(int measurement) switch (measurement) case < 0: case > 100: Console.WriteLine($"Measured value is {measurement}; out of an acceptable range."); break; default: Console.WriteLine($"Measured value is {measurement}."); break;

    在 switch 语句中,控制不能从一个 switch 部分贯穿到下一个 switch 部分。 如本部分中的示例所示,通常使用每个 switch 部分末尾的 break 语句将控制从 switch 语句传递出去。 还可使用 return 和 throw 语句将控制从 switch 语句传递出去。 若要模拟贯穿行为,将控制传递给其他 switch 部分,可使用 goto 语句 。

    在表达式上下文中,可使用 switch 表达式 ,根据与表达式匹配的模式,对候选表达式列表中的单个表达式进行求值。

    Case guard

    case 模式可能表达功能不够,无法指定用于执行 switch 部分的条件。 在这种情况下,可以使用 case guard。 这是一个附加条件,必须与匹配模式同时满足。 case guard 必须是布尔表达式。 可以在模式后面的 when 关键字之后指定一个 case guard,如以下示例所示:

    DisplayMeasurements(3, 4); // Output: First measurement is 3, second measurement is 4. DisplayMeasurements(5, 5); // Output: Both measurements are valid and equal to 5. void DisplayMeasurements(int a, int b) switch ((a, b)) case (> 0, > 0) when a == b: Console.WriteLine($"Both measurements are valid and equal to {a}."); break; case (> 0, > 0): Console.WriteLine($"First measurement is {a}, second measurement is {b}."); break; default: Console.WriteLine("One or both measurements are not valid."); break;

    上述示例使用带有嵌套 关系模式 的 位置模式 。

    C# 语言规范

    有关更多信息,请参阅 C# 语言规范 的以下部分:

  • if 语句
  • switch 语句
  • 有关模式的详细信息,请参阅 C# 语言规范 的 模式和模式匹配 部分。

  • C# 参考
  • 条件运算符 ?:
  • 逻辑运算符
  • switch 表达式
  • 将缺失的事例添加到 switch 语句(样式规则 IDE0010)
  •