C#中的模式匹配(Pattern Matching)功能

写代码的时候编辑器自动优化了一下代码,看的有点疑惑,问了一下GPT


它从这个

 switch (tile.tag)
        {
            case "hill":
                return hillTerrain;
                
            case "grass":
                return grassTerrain;
            case "river":
                return riverTerrain;
            default:
                return null;
        }

变成了这个

 return tile.tag switch
        {
            "hill" => hillTerrain,
            "grass" => grassTerrain,
            "river" => riverTerrain,
            _ => null,
        };

 这段代码使用了C#中的模式匹配(Pattern Matching)功能,具体来说是switch表达式,它可以根据输入的值直接返回不同的结果。

根据tile.tag的值来决定返回哪个对象或值。如果tile.tag"hill""grass""river"中的一个,则返回相应的地形变量。如果tile.tag不属于上述任何一种情况,则返回null

这是C# 8.0及更高版本中的一个特性,它简化了传统的switch语句,使代码更简洁和易读。与传统switch语句相比,switch表达式更灵活,且更符合函数式编程风格。


另外有点忘了=>是什么意思,又问了一下gpt老师(我爱它)

在C#中,=>符号被称为“lambda操作符”或“箭头操作符”,它用于多种语法结构,常见于lambda表达式模式匹配中的switch表达式以及属性的简写。具体用途如下:

1. Lambda表达式

=>操作符最常见的用法是用于定义匿名函数lambda表达式。在这种情况下,=>操作符将参数与函数体分隔开。

Func<int, int> square = x => x * 2;
  • x: lambda表达式的参数。
  • x * 2: lambda表达式的主体(即函数体),表示返回x的平方。

在这个示例中,square是一个函数,它接受一个int类型的参数x,并返回x的平方。

匿名函数(Anonymous Function)是没有名字的函数,它们通常用于需要将函数作为参数传递的地方,或者当你只需要定义一次性的小型函数时。匿名函数可以在代码中内联书写,而不需要为其显式命名。在C#中,匿名函数主要通过Lambda表达式来实现。

2. switch表达式中的模式匹配

switch表达式中,=>操作符用于将模式与返回值或表达式关联起来。

示例就是最开始的那个

3. 简写属性或方法

在C# 6.0及更高版本中,=>可以用来简写单行属性的get访问器或方法体。

public string FullName => $"{FirstName} {LastName}";

等价于:

public string FullName
{
    get { return $"{FirstName} {LastName}"; }
}

这里,=>操作符简化了get访问器的语法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值