C# 如何检查空值。 (值为空)或(空 == 值)。我们可以使用`is`运算符而不是==运算符[重复]

Posted

技术标签:

【中文标题】C# 如何检查空值。 (值为空)或(空 == 值)。我们可以使用`is`运算符而不是==运算符[重复]【英文标题】:C# how to check for null. (value is null) or (null == value). Can we use `is` operator instead of == operator [duplicate] 【发布时间】:2019-04-10 14:51:02 【问题描述】:

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

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

对象除了为空之外也可以为空吗?

【问题讨论】:

我们不自己尝试一下吗?这不是很多工作...... @random:虽然我同意 OP 可以检查它是否有效,但这并不能提供尽可能多的关于正在发生的事情的信息。 (虽然我已经将其作为副本关闭了,因为现在找到了更合适的副本,但我已经留下了我的答案,因为在这里没有害处。) @JonSkeet 你会得到不错的投票;) @HimBromBeere:有了代表上限,这实际上并不会产生任何代表差异...... 【参考方案1】:

是的,您可以使用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 == nullx is null 给出不同的结果,但这几乎总是一个设计(或实现)问题。

没有对象是“空的”的概念——事实上它不是空的对象。暂时不考虑可空值类型,它是一个 reference,它是 null,而不是对象 - null 值表示不存在对象。在你的脑海中仔细区分对象和引用是值得的。

一些特定的对象类型有一个“空”的概念——例如,一个字符串可以是空的,也可以是一个集合——但是这些类型有特定的测试空的方法。没有对象为空的一般概念。

【讨论】:

我感觉由于语言障碍而丢失了一些东西......我认为“空”概念是指类似于python的东西,其中一个空列表返回false if ([]) : //返回false @Mars:但是对于一般对象,C# 中没有这样的概念。有空数组或空列表等的概念 - 但您需要专门检查。 我知道。想想这可能是这个问题的来源,即使它没有被问得很清楚 @Mars:在答案末尾添加了一个段落来帮助解决这个问题。 @EnricoMassone:关键是如果你 想要 == null 有时为非空值返回 true(一种“逻辑空”),那么如果你改变它与is null 相比,它的行为方式不同。但是,如果== null 当且仅当左操作数实际上是空引用时返回 true,则只需使用 is null 代替。

以上是关于C# 如何检查空值。 (值为空)或(空 == 值)。我们可以使用`is`运算符而不是==运算符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

excel 怎样筛选出 有一个值为空的行

怎样用SQL语句在某一值为空时赋值给它另一个值

HttpResponse返回的值为空

如何在输入值为空的时候查询全部结果。 如果不明白我说啥留QQ 在线等

SQL 语句 把一个值为0的字段改为空('null')

sql中更新某个字段中部分空值的语句怎样写?