if 和 switch 语句

您所在的位置:网站首页 if判断语句 if 和 switch 语句

if 和 switch 语句

2023-12-08 03:20| 来源: 网络整理| 查看: 265

选择语句 - if、if-else 和 switch 项目 08/01/2023

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."); } else { 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}"); } else { 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 语句使用以下模式:

关系模式:用于将表达式结果与常量进行比较。 常量模式:测试表达式结果是否等于常量。

重要

有关 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)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3