C#语言中从Switch语句转换到Switch表达式

概述:许多编程语言(包括 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# 中更易于阅读和编写,因为它们的语法更简洁。

下面是一些示例,展示了开关表达式的不同功能:

  1. 简单示例:

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 模式) 来处理未返回特定值的情况。_

主要区别:

  1. 语法:

  • **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 值

    如果你喜欢我的文章,请给我一个赞!谢谢

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值