c# - 空条件结果类型,我错过了什么吗?

标签 c# resharper nullable

if (Station?.SeparateJob) 被标记,我不明白为什么。

Resharper 对 if (Station?.SeparateJob == true) 感到满意,通常它会标记 == true。

我认为 null 在这种情况下应该评估为 false,但有人告诉我不能像这样将 nullable 转换为 bool。

最佳答案

C# 不允许将 null 强制转换为 false,也不允许将可为 null 的类型强制转换为不可为 null 的对应类型。

Station?.SeparateJob 计算结果为 bool?。 (必须如此,因为如果 Stationnull,则结果为 null。)无法对 执行 if 语句bool?,并且 bool? 无法隐式转换为 bool,因此编译器会发出错误。

但是,语句 Station?.SeparateJob == true 是允许的,因为可空类型可以与不可空类型进行比较。如果左侧为 true,则此比较返回 true;如果左侧为 false,则返回 false >空。比较的结果是 true bool(不可为 null),因此 if 语句可以编译。

Resharper 将标记您将 booltrue 进行比较的情况(因为没有必要),但不会标记您比较 bool 的情况? 为 true(因为这是必需的)。

关于c# - 空条件结果类型,我错过了什么吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33642186/

相关文章:

c# - 播放并等待动画/动画师完成播放

c# - 如何在 C# 中更改文件创建时间?

c# - 可能有意重新抛出 Resharper 异常

c# - Visual Studio : Sorting and Filtering Intellisense List

c# - 可空值类型只是常规值类型的包装器吗?

c# - 从 WCF 服务读取全局应用程序属性

c# - 我应该如何解决我在 C# 中的方法访问安全性?

javascript - 使用 Jasmine 进行 VS、Resharper、Karma 和 AngularJS 模板单元测试

sql - 确定 Oracle null == null

c# - 在 C# 中使用隐式类型的可空变量?