这个问题在这里已有答案:
C#如何检查null
。 (value is null)
或(null == value)
。我们可以使用is
运算符而不是==
运算符吗?
C#7.0支持使用is
运算符的const模式。所以我们可以使用is null
进行所有空值检查?
除了null之外,对象是否也可以为空?
是的,您可以使用is
运算符和null
的常量模式来检查引用(或可空值类型值)是否为空。
实际上,在C#7中我会说使用is null
是测试空值的最惯用的方法,因为它不使用任何用户定义的运算符。考虑一下:
string x = GetStringFromSomewhere();
if (x == null) { } // Option 1
if (x is null) { } // Option 2
这里,选项1将调用==
中定义的string
运算符重载。虽然这应该做你想要的(我希望JIT编译器会非常重视它),但是你并不想特别想要这样做 - 你只想测试x
的值是否为空引用。这正是选项2所做的。
所以是的,如果你没有执行奇怪自定义比较的类型,你可以使用is null
进行所有空值检查。编写一个类可能会使x == null
和x is null
得到不同的结果,但这几乎总是一个设计(或实现)问题。
没有一个对象是“空”的概念 - 事实上它并不是空的对象。暂时不考虑可以为空的值类型,它是一个null的引用,而不是一个对象 - null值表示没有对象。值得在您的脑海中仔细区分对象和引用。
一些特定的对象类型具有“空”的概念 - 例如,字符串可以是空的,或者是集合 - 但是这些类型具有测试空虚的特定方式。对象没有一般概念是空的。