📜  switch 表达式 c# 多用例 - C# (1)

📅  最后修改于: 2023-12-03 15:05:26.759000             🧑  作者: Mango

Switch 表达式 C# 多用例

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 表达式的高级用法

除了上述基本用法外,Switch 表达式还有一些高级用法,让开发人员可以处理更复杂的情况。

Tuple 模式

与常量模式、类型模式类似,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 表达式模式可以将复杂逻辑封装在一个 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 中一种十分强大的用于多条件分支的语言特性,它提供了一种简洁、易读的方式处理多个条件分支,以及更多的高级用法,可以帮助开发人员处理更多更复杂的情况,从而提升开发效率和代码质量。