C# - 决策语句
C# - 决策语句
Section titled “C# - 决策语句”决策结构是编程逻辑的基石。它们允许程序评估条件,并根据这些条件是 true(真)还是 false(假)来执行不同的代码块。这使得应用程序能够实现动态和响应式的行为。
决策的基本流程是:
1. 测试一个条件。2. 如果条件为真(TRUE),执行特定的代码块。3. 如果条件为假(FALSE),执行不同的代码块(或者什么也不做)。4. 继续程序的其余部分。C# 中的条件语句
Section titled “C# 中的条件语句”C# 提供了一组强大的语句来处理条件逻辑。
| 语句 | 描述 |
|---|---|
| if | 如果指定条件为真,则执行一个代码块。 |
| if…else | 如果条件为真,执行一个代码块;如果条件为假,则执行另一个代码块。 |
| if…else if…else | 按顺序测试一系列条件,并执行第一个为真的条件。 |
| switch | 根据与表达式的模式匹配,选择要执行的多个代码块之一。 |
三元运算符(?:) | 一个返回值的 if...else 语句的简写形式。 |
if、else if 和 else 语句
Section titled “if、else if 和 else 语句”这些是最常见的决策语句。它们用于根据一个或多个布尔条件来控制程序流程。
这个示例检查当前温度并提供不同的反馈。请注意 else if 块中清晰的逻辑和修正的条件。
using System;
public class WeatherReport{ public static void Main() { int temperature = 20;
if (temperature < 0) { Console.WriteLine("It's freezing outside!"); } else if (temperature < 15) { Console.WriteLine("It's a cold day. Wear a jacket."); } else if (temperature >= 15 && temperature < 25) { Console.WriteLine("The weather is pleasant."); } else // temperature >= 25 { Console.WriteLine("It's a hot day. Stay hydrated!"); }
Console.WriteLine($"Execution complete. Current temperature was: {temperature}°C"); }}如果你编译并执行 temperature = 20 的代码,结果是:
The weather is pleasant.Execution complete. Current temperature was: 20°Cswitch 语句和 switch 表达式
Section titled “switch 语句和 switch 表达式”当你需要针对多个可能值测试单个变量或表达式时,switch 语句是理想选择。现代 C# 通过模式匹配显著增强了 switch 语句,并引入了更简洁的 switch 表达式。
示例:经典 switch 语句
Section titled “示例:经典 switch 语句”using System;
public class DayOfWeekPrinter{ public static void PrintDay(int day) { switch (day) { case 1: Console.WriteLine("Monday"); break; case 2: Console.WriteLine("Tuesday"); break; case 3: Console.WriteLine("Wednesday"); break; case 4: Console.WriteLine("Thursday"); break; case 5: Console.WriteLine("Friday"); break; case 6: case 7: Console.WriteLine("It's the Weekend!"); break; default: Console.WriteLine("Invalid day number!"); break; } }}示例:现代 switch 表达式 (C# 8.0+)
Section titled “示例:现代 switch 表达式 (C# 8.0+)”switch 表达式提供了更具函数式且更简洁的语法,非常适合根据条件进行赋值。
public static string GetDayName(int day){ string dayName = day switch { 1 => "Monday", 2 => "Tuesday", 3 => "Wednesday", 4 => "Thursday", 5 => "Friday", 6 or 7 => "Weekend", // 'or' 模式 _ => "Invalid day" // _ 是弃元/默认情况 }; return dayName;}示例:带模式匹配的 switch (C# 9.0+)
Section titled “示例:带模式匹配的 switch (C# 9.0+)”模式匹配允许基于类型和属性值进行切换,使其功能极其强大。
public decimal CalculateToll(object vehicle){ return vehicle switch { Car c when c.Passengers == 0 => 2.00m + 0.50m, // 没有乘客的汽车 Car c when c.Passengers == 1 => 2.00m, Car c when c.Passengers == 2 => 2.00m - 0.50m, Car _ => 2.00m - 1.00m, // 任何其他汽车 Taxi t => 3.50m, Bus b => 5.00m, { } => 4.00m, // 任何其他非空对象 null => throw new ArgumentNullException(nameof(vehicle)) };}
// 示例的模拟类public class Car { public int Passengers { get; set; } }public class Taxi { }public class Bus { }三元条件运算符(?:)
Section titled “三元条件运算符(?:)”三元运算符是一种紧凑的内联 if-else 语句。它接受三个操作数:condition ? value_if_true : value_if_false。
int userAge = 21;
// 使用 if-elsestring status;if (userAge >= 18){ status = "Adult";}else{ status = "Minor";}
// 使用三元运算符 - 更简洁string ternaryStatus = userAge >= 18 ? "Adult" : "Minor";
Console.WriteLine($"Status from if-else: {status}");Console.WriteLine($"Status from ternary: {ternaryStatus}");- 清晰是关键:对于复杂的逻辑块,优先使用
if-else。三元运算符仅用于简单、短小的赋值。 - 避免深度嵌套:深度嵌套的
if语句难以阅读和调试。将其重构为单独的方法或使用不同的控制结构。 - 对多值情况使用
switch:如果你将单个变量与 3 个或更多常量值进行比较,switch语句或表达式通常比冗长的if-else if链更清晰。 - 拥抱模式匹配:对于现代 C# 开发,学习并使用
switch的模式匹配。它可以显著简化复杂的条件逻辑。