C# switch 语句:快速上手单行输出技巧
C# 的 switch
语句提供了一种高效的控制流结构,用于根据表达式的值执行不同的代码块。传统的 switch
语句通常需要多个 case
标签和 break
语句,代码结构较为冗长。C# 7.0 引入了新的语法特性,支持单行 case
表达式和模式匹配,极大地简化了 switch
语句的写法,尤其是在处理简单输出或赋值场景时,能够大幅提升代码的简洁性和可读性。本文将详细介绍 C# switch
语句的用法,重点讲解如何利用单行输出技巧编写更优雅的代码。
1. 传统的 switch
语句
传统的 switch
语句结构如下:
“`csharp
int dayOfWeek = 3;
string dayName;
switch (dayOfWeek)
{
case 1:
dayName = “Monday”;
break;
case 2:
dayName = “Tuesday”;
break;
case 3:
dayName = “Wednesday”;
break;
case 4:
dayName = “Thursday”;
break;
case 5:
dayName = “Friday”;
break;
case 6:
dayName = “Saturday”;
break;
case 7:
dayName = “Sunday”;
break;
default:
dayName = “Invalid day”;
break;
}
Console.WriteLine(dayName);
“`
这种写法需要为每个 case
分支编写多行代码,包括赋值语句和 break
语句,代码显得比较冗长。
2. C# 7.0 的单行 case
表达式
C# 7.0 引入了一种更简洁的 switch
语句写法,允许使用表达式语法,将每个 case
分支简化为一行代码:
“`csharp
int dayOfWeek = 3;
string dayName = dayOfWeek switch
{
1 => “Monday”,
2 => “Tuesday”,
3 => “Wednesday”,
4 => “Thursday”,
5 => “Friday”,
6 => “Saturday”,
7 => “Sunday”,
_ => “Invalid day”
};
Console.WriteLine(dayName);
“`
在这个例子中,switch
表达式直接返回一个字符串值,赋值给 dayName
变量。每个 case
分支使用 =>
操作符连接匹配值和返回值,省略了 break
语句。_
表示默认情况,相当于 default
关键字。
3. 模式匹配的应用
C# 7.0 及更高版本还引入了模式匹配,可以进一步增强 switch
语句的表达能力。例如,可以使用 when
关键字添加条件判断:
“`csharp
int number = 20;
string message = number switch
{
< 0 => “Negative”,
0 => “Zero”,
> 0 and < 10 => “Small positive”,
> 10 and < 20 => “Medium positive”,
>= 20 => “Large positive”,
_ => “Unknown”
};
Console.WriteLine(message);
“`
在这个例子中,when
关键字用于限定匹配条件。例如,> 0 and < 10
表示匹配大于 0 小于 10 的数字。
4. 元组模式匹配
C# 8.0 引入了元组模式匹配,可以更方便地处理多个变量的组合情况:
“`csharp
(int x, int y) point = (10, 20);
string quadrant = point switch
{
(0, 0) => “Origin”,
( > 0, > 0) => “Quadrant I”,
( < 0, > 0) => “Quadrant II”,
( < 0, < 0) => “Quadrant III”,
( > 0, < 0) => “Quadrant IV”,
_ => “On an axis”
};
Console.WriteLine(quadrant);
“`
5. 类型模式匹配
C# 9.0 进一步扩展了模式匹配,支持类型模式匹配,可以根据变量的类型执行不同的代码块:
“`csharp
object value = 10;
string type = value switch
{
int i => $”Integer: {i}”,
string s => $”String: {s}”,
double d => $”Double: {d}”,
_ => “Unknown type”
};
Console.WriteLine(type);
“`
6. 在方法中的应用
单行 switch
表达式可以直接在方法中返回结果,简化代码结构:
csharp
public static string GetDayName(int dayOfWeek) => dayOfWeek switch
{
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
4 => "Thursday",
5 => "Friday",
6 => "Saturday",
7 => "Sunday",
_ => "Invalid day"
};
7. 性能考虑
单行 switch
表达式和传统的 switch
语句在性能方面差别不大。编译器会将 switch
表达式转换成等效的 switch
语句。
8. 最佳实践
- 对于简单的输出或赋值场景,优先使用单行
switch
表达式,提升代码简洁性。 - 对于复杂的逻辑处理,仍然可以使用传统的
switch
语句,保持代码清晰度。 - 合理利用模式匹配,增强代码的表达能力。
9. 总结
C# 的 switch
语句结合单行输出技巧和模式匹配,提供了一种强大而灵活的控制流机制。通过学习和掌握这些技巧,可以编写更简洁、更易读、更高效的 C# 代码。 单行 switch
表达式尤其适用于快速处理简单的输出或赋值场景,极大地提升了代码的可读性和可维护性。 随着 C# 版本的不断更新,switch
语句的功能也在不断增强,例如 C# 11 引入了 switch
表达式对字符串的 Span<char>
和 ReadOnlySpan<char>
的支持,进一步扩展了其应用范围。 在实际开发中,应根据具体情况选择合适的 switch
语句写法,权衡代码简洁性和可读性,编写出优雅高效的 C# 代码。