C# switch 语句:快速上手单行输出技巧 – wiki基地

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# 代码。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部