如何阅读
!nullableboolean ?? false
当nullableboolean == null
等于false
时。
根据:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/
!
强于??
它也与
不同!(nullableboolean ?? false)
当nullableboolean == null
等于true
时。
但是!nullableboolean == null
这似乎没有记载。当然!null
无法编译。也许它只能与??
一起使用。因此,??
可能有一个未记录的对应操作符!
??
,但!null ?? false
也无法编译。
有人知道某些解释或文件吗?
答案 0 :(得分:7)
在空!
will produce null上使用boolean?
运算符。 Documentation:
预定义的一元和二元运算符以及值类型存在的任何用户定义的运算符也可以由可空类型使用。 如果操作数为空,则这些运算符产生空值;否则,运算符使用包含的值来计算结果。
答案 1 :(得分:6)
如何阅读
!nullableboolean ?? false
这与(!nullableboolean) ?? false
相同,与bool? temp = !nullableboolean ... temp.HasValue ? temp.Value : false
它也与
不同!(nullableboolean ?? false)
正确。这将具有!(nullableboolean.HasValue ? nullableboolean.Value : false)
但是
!nullableboolean == null
如果nullableboolean
为null,则其反转也为空,正确。与#34;相反;我不知道这是真是假?"是"我不知道这是假的还是真的"。你还是不知道。
这似乎没有记载。
不是。
当然
!null
没有编译。
我不记得这个或在Roslyn代码中确定的原因。重载决策可以推断出没有适用的用户定义的运算符 - 因为它们是按类型查找的,而null没有类型 - 并且唯一的内置运算符是提升的!
运算符。
但正常规则的这种例外的一个很好的理由是,它几乎总是一个错误!如果" null bool?"打算然后(bool?)null
或default(bool?)
或new bool?()
都会更好。如果没有意图,那么代码是错误的。无论哪种方式,都可以安全地拒绝。
如果我有空闲时间,我会查看代码,看看我是否能回忆起这项检查的实施位置。
也许它只与??
一起使用
没有
也许吧?有一个无证件的对应操作员! ??
没有
!null ?? false
也无法编译。
正确;再次!null
被某些特殊规则拒绝。
有人知道某些解释或文件吗?
阅读规范。我关于如何编写可空算术优化器的文章也可能对你感兴趣:
https://ericlippert.com/2012/12/20/nullable-micro-optimizations-part-one/