C# 类型模式
2023-01-15 10:52 作者:SunnieShine | 我要投稿
1、语法
与其单独讲类型模式,还不如让你先明白,声明模式的那个类型,就是类型模式。
所以,你干脆理解成这样:“声明模式 = 类型模式(就是这个类型)+ 变量定义”。但是,单独提出来说,是有原因的。
2、不支持可空类型的类型模式
C# 8 开始拥有可空引用类型,而在 C# 2 开始则拥有可空值类型。这两种数据类型都带有 ?
标记类型是可空的。不过,这些类型并不能使用到类型模式之中。
这两种都是错误的。原因很简单:因为 is
是匹配类型,因此它必须得是这个类型。而既然都是这个类型的数据了,那么为何还去匹配一个可空类型呢?假设 obj
是 int
类型的数据,那么 int is int?
合理吗?显然不合理。int is int
才合理。那 null is int?
吗?null
是没数值的可空类型的默认数值,它不包含任何数值,因此 is
匹配它是没有意义的。
正是因为这些原因,你无法在 is
后使用和声明可空类型作为类型模式——因为是没有意义的。
3、声明模式弃元
在 C# 里,switch
语句可以专门对一个不知道是什么类型的东西作模式匹配:
arr
、enumerable
等变量如果不用,我们无法去掉:C# 9 之前,这个变量是不可省去的:即使不用,你也得写弃元符号:_
不过,从 C# 9 开始,弃元符号就可以不写了。于是乎,模式匹配就可以简写成真正的类型模式了: