C#如何检查null
。 (value is null)
或者(null == value)
。我们可以使用is
运算符代替==
运算符吗?
C# 7.0支持使用is
运算符进行常量模式匹配。那么我们可以使用is null
来检查所有的null吗?
除了null之外,对象是否也可能为空呢?
C#如何检查null
。 (value is null)
或者(null == value)
。我们可以使用is
运算符代替==
运算符吗?
C# 7.0支持使用is
运算符进行常量模式匹配。那么我们可以使用is null
来检查所有的null吗?
除了null之外,对象是否也可能为空呢?
是的,您可以使用null
的常量模式和is
运算符来检查引用(或可空值类型值)是否为null
。
实际上,在C# 7中,我会说使用is null
是测试null值的最流行的方式,因为它不使用任何用户定义的运算符。考虑以下示例:
string x = GetStringFromSomewhere();
if (x == null) { } // Option 1
if (x is null) { } // Option 2
在这里,选项1将调用string
中定义的==
运算符重载。虽然它应该会做你想要的事情(我预计即时编译器会对其进行优化),但这并不像你特别希望那样 - 你只是想测试x
的值是否为null引用。这正是选项2所做的。
因此,如果您没有执行奇怪的自定义比较的类型,则可以使用is null
进行所有null检查。可以编写一种类,以使x == null
和x is null
产生不同的结果,但这几乎总是设计(或实现)问题。
不存在对象被“empty”的概念 - 实际上,为null的不是object。暂且不论可为空的值类型,为null的是一个reference而不是一个对象 - null值表示对象不存在。在你的脑海中仔细区分对象和引用非常值得。
一些特定的对象类型有“empty”的概念 - 例如,字符串可以为空,或者集合可以为空 - 但这些类型有特定的方法来测试是否为空。没有general的概念指对象为空。
== null
有时对非空值返回true(一种“逻辑null”),那么如果你将该比较改为is null
,它就不会表现出相同的行为。但是,如果== null
仅在左操作数实际上是null引用时返回true,那么只需使用is null
即可。 - Jon Skeet