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)