【发布时间】:2020-02-18 15:58:24
【问题描述】:
a tweet from Jared Parsons 是 c# 编译器开发人员。该推文声称我们应该使用“is object”作为非空检查。
我的问题是为什么会这样,如果我从服务调用中得到结果,我应该运行“is object”检查而不是“!= null”吗?
根据我的理解以及我在 Microsoft 文档 "is" keyword should be used as type check 中看到的内容。
我无法在 Microsoft 文档中的任何地方找到“is object”作为非空检查示例,这就是为什么我担心这是否真的是进行空检查的正确方法。
【问题讨论】:
-
==和!=可以重载,在这种情况下,nullity 的语义可能是意料之外的。使用is object或!(x is null)保证参考比较。 -
vc 74 - 您能否提供有关如何重载 == 或 != 的示例?
-
复制根本不是一个好的选择。它没有解释为什么需要
is object和is null,或者有什么优势。 -
这是我为运算符重载得到的第一个 SO 搜索结果
==stackoverflow.com/a/25461680/1462295 -
@ChrisT 不,这可能非常令人困惑,但
Equals可能具有与==完全不同的行为,此外,==在编译时解析,Equals在运行时解析。如果你真的想检查 x 是否为空引用,C#7 之前的唯一选择是使用object.ReferenceEquals。模式匹配带来了新的选择。