C#如何检查null。 (值是null)或(空==值)。我们可以使用`is`运算符代替==运算符吗

时间:2018-11-07 07:17:01

标签: c# null nullable c#-7.0

C#如何检查null(value is null)(null == value)。我们可以使用is运算符代替==运算符吗?

C#7.0使用is运算符支持const模式。因此,我们可以使用is null进行所有null检查吗?

除了为null之外,对象还可以为空吗?

1 个答案:

答案 0 :(得分:10)

是的,您可以将is运算符与常量模式null一起使用,以检查引用(或可空值类型值)是否为空。

实际上,在C#7中,我会说使用is null是测试空值的最惯用方式,因为它不使用任何用户定义的运算符。考虑一下:

string x = GetStringFromSomewhere();

if (x == null) { }  // Option 1
if (x is null) { }  // Option 2

在这里,选项1将调用==中定义的string运算符重载。尽管这应该可以满足您的要求(并且我希望JIT编译器会对其进行很大程度的优化),但这并不是您特别想想要那样做-您只想测试{{1 }}为空引用。这就是选项2所做的。

是的,如果没有用于执行奇数个自定义比较的类型,则可以将x用于所有空检查 。可以编写这样的类,使is nullx == null给出不同的结果,但这几乎总是一个设计(或实现)问题。

没有对象为“空”的概念-实际上,不是 object 为空。现在暂留可空值类型,这是一个 reference ,它是空的,不是对象-空值表示没有对象。值得在脑海中仔细区分对象和引用。

某些特定的对象类型具有“空”的概念-例如,字符串可以为空或集合-但这些类型具有测试空性的特定方法。没有对象为空的 general 概念。