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:有了代表上限,这实际上并不会产生任何代表差异......是的,您可以使用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
给出不同的结果,但这几乎总是一个设计(或实现)问题。
没有对象是“空的”的概念——事实上它不是空的对象。暂时不考虑可空值类型,它是一个 reference,它是 null,而不是对象 - null 值表示不存在对象。在你的脑海中仔细区分对象和引用是值得的。
一些特定的对象类型有一个“空”的概念——例如,一个字符串可以是空的,也可以是一个集合——但是这些类型有特定的测试空的方法。没有对象为空的一般概念。
【讨论】:
我感觉由于语言障碍而丢失了一些东西......我认为“空”概念是指类似于python的东西,其中一个空列表返回false if ([]) : //返回false @Mars:但是对于一般对象,C# 中没有这样的概念。有空数组或空列表等的概念 - 但您需要专门检查。 我知道。想想这可能是这个问题的来源,即使它没有被问得很清楚 @Mars:在答案末尾添加了一个段落来帮助解决这个问题。 @EnricoMassone:关键是如果你 想要== null
有时为非空值返回 true(一种“逻辑空”),那么如果你改变它与is null
相比,它的行为方式不同。但是,如果== null
当且仅当左操作数实际上是空引用时返回 true,则只需使用 is null
代替。以上是关于C# 如何检查空值。 (值为空)或(空 == 值)。我们可以使用`is`运算符而不是==运算符[重复]的主要内容,如果未能解决你的问题,请参考以下文章