C#如何检查null
。 (value is null)
或(null == value)
。我们可以使用is
运算符代替==
运算符吗?
C#7.0使用is
运算符支持const模式。因此,我们可以使用is null
进行所有null检查吗?
除了为null之外,对象还可以为空吗?
答案 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 null
和x == null
给出不同的结果,但这几乎总是一个设计(或实现)问题。
没有对象为“空”的概念-实际上,不是 object 为空。现在暂留可空值类型,这是一个 reference ,它是空的,不是对象-空值表示没有对象。值得在脑海中仔细区分对象和引用。
某些特定的对象类型具有“空”的概念-例如,字符串可以为空或集合-但这些类型具有测试空性的特定方法。没有对象为空的 general 概念。