欢迎光临散文网 会员登陆 & 注册

C# 常量模式

2023-01-14 22:19 作者:SunnieShine  | 我要投稿

1、语法

常量模式针对于一个可能为 null 的数据类型的实例,判断是否等于某个具体的常量。

在这段代码下,我们直接在 is 后紧跟一个数值,这表示将 object 进行类型和数值的双重判断。等价的代码是这样的:

那么,为什么非得是 int 呢?因为这里的 3 这个字面量,默认是 int 类型的,因此这里在等价代码里用的是 int 作为类型的判断。

2、可空值类型的常量模式匹配是不必要的

另外,我们也可以对一个可空值类型使用这样的常量模式判断。

比如这个格式。这个格式很明显等价于 i is int p && p == 3 && j is int q && q == 3。正是因为写起来很长,所以我们才会使用这样的模式匹配来简化代码。不过,这个模式匹配是不必要的。早在可空值类型出现的时候,它们自身的等号和不等号的逻辑就已经可具有这样的判断了。换句话说,你写成这样,和模式匹配的格式将是一样的等价代码。

这里,i 就算是 null,也不会影响判断 i == 3 的结果。大不了结果为 false 就是了。

3、double.NaN 的特殊处理

假设我们用 is double.NaN 对一个对象进行数值匹配:

这表示什么?d == double.NaN 吗?虽然好像没啥毛病,但是大家也都知道,double 类型的等号比较是严格的,因此很多时候比较起来都不一定相等。因此,C# 的 API 有一个 double.IsNaN 方法在专门对这个情况进行判断。而此时的 d is double.NaN 就刚好是在调用此方法。也就是说,这个 if 条件会被翻译为这样:

是的。类型判断后,然后直接调用此方法来判断,而并非是 d == double.NaN

C# 常量模式的评论 (共 条)

分享到微博请遵守国家法律