📅  最后修改于: 2023-12-03 15:05:26.759000             🧑  作者: Mango
Switch 表达式是 C# 8.0 新增的语言特性,它提供了一种简洁的方式处理多个条件分支,与传统的 switch 语句相比,更加易读,可读性更高。
switch 表达式的基本语法如下:
var result = expression switch
{
pattern1 => result1,
pattern2 => result2,
pattern3 when condition => result3,
_ => defaultResult
};
其中,expression
表示要进行匹配的表达式,pattern
是匹配模式,=>
后面是要执行的代码块。如果没有任何模式匹配,会执行默认代码块 _ => defaultResult
。需要注意的是,如果没有默认模式,那么不完整的 switch 表达式会抛出编译时异常。
下面,我们来看一下几个基本的用法。
当表达式的值等于某个常量时,可以使用常量模式进行匹配。
int score = 90;
string grade = score switch
{
90 => "A",
80 => "B",
70 => "C",
_ => "D"
};
当表达式的类型为某个类型时,可以使用类型模式进行匹配。
object obj = "Hello, world!";
string str = obj switch
{
string s => s.ToUpper(),
int i => i.ToString(),
_ => string.Empty
};
当表达式的值符合某个正则表达式时,可以使用正则表达式模式进行匹配。
string email = "test@example.com";
bool isValidEmail = email switch
{
var e when Regex.IsMatch(e, "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$") => true,
_ => false
};
当表达式的值在某个范围内时,可以使用值范围模式进行匹配。
int num = 5;
string result = num switch
{
var n when n < 0 => "Negative",
var n when n >= 0 && n < 10 => "Single Digit",
var n when n >= 10 && n < 100 => "Double Digit",
var n when n >= 100 && n < 1000 => "Triple Digit",
_ => "Large Number"
};
除了上述基本用法外,Switch 表达式还有一些高级用法,让开发人员可以处理更复杂的情况。
与常量模式、类型模式类似,Tuple 模式也是一种可以用于 switch 表达式的模式。它用于匹配多个值,并将它们分解为多个变量。
var point = (x: 1, y: 2);
string quadrant = point switch
{
(0, 0) => "Origin",
(var x, var y) when x > 0 && y > 0 => "Quadrant 1",
(var x, var y) when x < 0 && y > 0 => "Quadrant 2",
(var x, var y) when x < 0 && y < 0 => "Quadrant 3",
(var x, var y) when x > 0 && y < 0 => "Quadrant 4",
(_, _) => "On Axis"
};
合并模式可以将多个模式结合在一起作为一个条件。
var obj = new object();
string result = obj switch
{
null => "Null Object",
string s when s.Length > 10 => "Long String",
Guid _ => "Guid Object",
_ => "Default Object"
};
Lambda 表达式模式可以将复杂逻辑封装在一个 Lambda 表达式中。
var list = new List<int> { 1, 2, 3, 4, 5 };
string result = list switch
{
{ Count: 0 } => "Empty List",
var { Count: 1, [0]: var first } => $"List with one element ({first})",
var { Count: 2, [0]: var first, [1]: var second } when first < second => $"List with two elements ({first}, {second}) in ascending order",
var { Count: 2, [0]: var first, [1]: var second } when first > second => $"List with two elements ({first}, {second}) in descending order",
{ } => $"List with {list.Count} elements"
};
Switch 表达式是 C# 8.0 中一种十分强大的用于多条件分支的语言特性,它提供了一种简洁、易读的方式处理多个条件分支,以及更多的高级用法,可以帮助开发人员处理更多更复杂的情况,从而提升开发效率和代码质量。