C#如何检查null.(value为null)或(null == value).我们可以使用`is`运算符而不是==运算符

Sha*_*han 3 c# null nullable c#-7.0

C#怎么检查null.(value is null)(null == value).我们可以使用is运算符代替==运算符吗?

C#7.0支持带is运算符的const模式.所以我们可以is null用于所有空检查?

除了null之外,对象是否也可以为空?

Jon*_*eet 19

是的,您可以使用is具有常量模式的运算符null来检查引用(或可为空的值类型值)是否为null.

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

string x = GetStringFromSomewhere();

if (x == null) { }  // Option 1
if (x is null) { }  // Option 2
Run Code Online (Sandbox Code Playgroud)

这里,选项1将调用==定义的运算符重载string.虽然这应该做你想要的(我希望JIT编译器会非常重视它),但它并不像你特别想要那样 - 你只想测试值x是否为空引用.这正是选项2所做的.

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

没有一个对象是"空"的概念 - 事实上它并不是空的对象.暂时不考虑可以为空的值类型,它是一个null 的引用,而不是一个对象 - null值表示没有对象.值得在您的脑海中仔细区分对象和引用.

一些特定的对象类型具有"空"的概念 - 例如,字符串可以是空的,或者是集合 - 但是这些类型具有测试空虚的特定方式.对象没有一般概念是空的.