C# ??操作员差异

goo*_*eem 4 c# if-statement nullable

'??之间有区别吗?if语句中的true'和'== true'?

bool? b = Jsonfile.GetBoolean("testval");
if (b ?? true) { }
if (b == true) { }
Run Code Online (Sandbox Code Playgroud)

Iva*_*oev 25

就在这里.

b ?? true当将匹配bnulltrue

b == true当将匹配bnull和是true

所不同的是在表中的第一行(当bnull)

b      b ?? true  b == true
====   ========== ==========
null   true       false
true   true       true
false  false      false
Run Code Online (Sandbox Code Playgroud)


Pat*_*man 11

是.

如果b为null:

  • b == true 将返回false.
  • b ?? true 会是真的.

由于??是null-coalescing运算符,它只有在左手值为时才有效null.在这种情况下,它确实很重要.

正如juharr对你的问题发表了评论:

b ?? false 是相同的 b == true

这是真的,因为b.GetValueOrDefault()返回false,实际上与?? false这种情况相同.如果b == null,b.GetValueOrDefault() == true会屈服false.