写代码的时候编辑器自动优化了一下代码,看的有点疑惑,问了一下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
访问器的语法。