if (Station?.SeparateJob) 被标记,我不明白为什么。
Resharper 对 if (Station?.SeparateJob == true) 感到满意,通常它会标记 == true。
我认为 null 在这种情况下应该评估为 false,但有人告诉我不能像这样将 nullable 转换为 bool。
最佳答案
C# 不允许将 null
强制转换为 false
,也不允许将可为 null 的类型强制转换为不可为 null 的对应类型。
Station?.SeparateJob
计算结果为 bool?
。 (必须如此,因为如果 Station
为 null
,则结果为 null
。)无法对 执行 if 语句bool?
,并且 bool?
无法隐式转换为 bool
,因此编译器会发出错误。
但是,语句 Station?.SeparateJob == true
是允许的,因为可空类型可以与不可空类型进行比较。如果左侧为 true
,则此比较返回 true
;如果左侧为 false
或 ,则返回
。比较的结果是 true false
>空bool
(不可为 null),因此 if 语句可以编译。
Resharper 将标记您将 bool
与 true
进行比较的情况(因为没有必要),但不会标记您比较 bool 的情况?
为 true(因为这是必需的)。
关于c# - 空条件结果类型,我错过了什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33642186/