概述:许多编程语言(包括 C#)的共同功能是 switch 语句。它提供了一种简洁的方法来处理代码块中的多个条件。但随着编程语言的发展,添加了新功能以提高代码的可读性、可维护性和有效性。是 C# 8.0 中添加的一项此类功能,与传统的 switch 语句相比,它提供了更简洁的语法和附加功能。Switch Expressions它是什么时候推出的?Switch Expressions在 2019 年 9 月发布的 C# 8.0 中引入。此版本的 C# 带来了一些新功能和增强功能,其中开关表达式是最值得注意的新增功能之一。如何使用切换表达式:当使用 switch 表达式而不是 switch 语句时,代
许多编程语言(包括 C#)的共同功能是 switch 语句。它提供了一种简洁的方法来处理代码块中的多个条件。但随着编程语言的发展,添加了新功能以提高代码的可读性、可维护性和有效性。是 C# 8.0 中添加的一项此类功能,与传统的 switch 语句相比,它提供了更简洁的语法和附加功能。Switch Expressions
它是什么时候推出的?
Switch Expressions在 2019 年 9 月发布的 C# 8.0 中引入。此版本的 C# 带来了一些新功能和增强功能,其中开关表达式是最值得注意的新增功能之一。
如何使用切换表达式:
当使用 switch 表达式而不是 switch 语句时,代码在 C# 中更易于阅读和编写,因为它们的语法更简洁。
下面是一些示例,展示了开关表达式的不同功能:
-
简单示例:
int day = 3;
string message = day switch
{
1 => "Monday",
2 => "Tuesday",
3 => "Wednesday",
_ => "Weekend" // Default case using underscore (\_)
};
Console.WriteLine(message); // Output: Wednesday
2. 使用枚举进行模式匹配:
enum TrafficLight { Red, Yellow, Green }
TrafficLight light = TrafficLight.Yellow;
string action = light switch
{
TrafficLight.Red => "Stop",
TrafficLight.Yellow => "Caution",
TrafficLight.Green => "Go"
};
Console.WriteLine(action); // Output: Caution
3. 附加条件的外壳防护装置:
int number = 10;
string result = number switch
{
int n when (n % 2 == 0) => "Even",
int n => "Odd",
_ => "Invalid"
};
Console.WriteLine(result); // Output: Even
4. 从开关表达式返回值:
与传统的 switch 语句不同,switch 表达式本身并不直接包含每个大小写中的语句。但是,它们仍可用于以简洁的方式返回值。方法如下:return
1. 隐式返回:
-
switch 表达式的每种情况都可以直接返回与表达式的预期返回类型匹配的值。
例:
int number = 5;
string message = number switch
{
1 => "One",
2 => "Two",
_ => "More than two"
};
Console.WriteLine(message); // Output: More than two (since 5 is not 1 or 2)
2. 带计算的显式回报:
-
您可以在事例中执行计算并返回结果。
例:
double length = 10;
double pricePerMeter = 5;
double totalPrice = length switch
{
double l when l > 0 => l * pricePerMeter,
_ => throw new ArgumentException("Invalid length")
};
Console.WriteLine(totalPrice); // Output: 50
要点:
-
switch 表达式的整体返回类型需要与每种情况返回的类型兼容。
-
对于未显式返回的情况,编译器将根据其他情况推断返回类型。
-
可以使用 (discard 模式) 来处理未返回特定值的情况。_
主要区别:
-
语法:
-
**Switch 语句:**传统上,C# 中的 switch 语句具有冗长的语法,要求对每个情况使用 and 关键字,并对处理不匹配的值使用一个情况。casebreakdefault
switch (variable)
{
case value1:
// statements
break;
case value2:
// statements
break;
// more cases
default:
// default statements
break;
}
切换表达式:切换表达式使用箭头语法提供更简洁的语法。它们消除了对显式语句的需要,并允许使用通配符的默认情况。=>break_
variable switch
{
value1 => // expression,
value2 => // expression,
// more cases
_ => // default expression
};
2. 类型推断:
-
**Switch 语句:**在 switch 语句中,每个大小写都必须显式匹配 switch 变量的类型。
-
**切换表达式:**开关表达式可以从大小写推断开关变量的类型,从而减少类型声明中的冗余。
3. 在 Lambda 表达式中使用:
-
**Switch 语句:**不能直接在 lambda 表达式中使用。
-
**切换表达式:**可以在 lambda 表达式中使用,从而在定义委托或事件处理程序时提供更简洁的代码。
4. 编译时检查:
-
**Switch 语句:**switch 语句中的错误可能仅在运行时被捕获,从而导致潜在的错误。
-
**切换表达式:**切换表达式提供更好的编译时检查,有助于在开发过程的早期捕获错误。
5. 空处理:
-
**Switch 语句:**无法直接处理 null 值,需要额外的检查。
-
**切换表达式:**可以使用通配符作为默认大小写处理 null 值
如果你喜欢我的文章,请给我一个赞!谢谢