应该怎么读
!nullableboolean ?? false
Run Code Online (Sandbox Code Playgroud)
当nullableboolean == null它等于false.
根据:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/
! 结合力强于 ??
它也不同于
!(nullableboolean ?? false)
Run Code Online (Sandbox Code Playgroud)
当nullableboolean == null它等于true.
但后来!nullableboolean == null这似乎没有记载.当然!null不编译.也许它只能与...一起使用??.所以也许??有一个没有文档的对应操作符! ??,但!null ?? false也没有编译.
有人知道一些解释或文件吗?
瑞安的回答是正确的; 解决你的许多其他问题:
应该怎么读
!nullableboolean ?? false
这与(!nullableboolean) ?? false以下相同bool? temp = !nullableboolean ... temp.HasValue ? temp.Value : false
它也不同于
!(nullableboolean ?? false)
正确.这将具有语义!(nullableboolean.HasValue ? nullableboolean.Value : false)
但是之后
!nullableboolean == null
如果nullableboolean为null,则其反转也为null,正确.与"我不知道这是真还是假"相反的是"我不知道这是假的还是真的".你还是不知道.
这似乎没有记载.
它不是.
当然
!null不编译.
我不记得这个或在Roslyn代码中确定的原因.重载分辨率可以推断出没有适用的用户定义的运算符 - 因为它们是按类型查找的,而null没有类型 - 并且唯一的内置运算符是提升的!运算符.
但正常规则的这种例外的一个很好的理由是它几乎总是一个错误!如果"一个空博?" 意图当时(bool?)null或者default(bool?)或者new bool?()都是优选的.如果不是这样,那么代码是错误的.无论哪种方式,都可以安全地拒绝.
如果我有空闲的时刻,我将查看代码,看看我是否能回想起这个检查的实施位置.
也许它只能与??一起使用?
没有.
也许吧?有一个无证件的对应操作员!??
没有.
!null ?? false也不编译.
正确; !null一些特殊规则再次拒绝了.
有人知道一些解释或文件吗?
阅读规范.我关于如何编写可空算术优化器的文章也可能对您感兴趣:
https://ericlippert.com/2012/12/20/nullable-micro-optimizations-part-one/