【问题标题】:Null conditional result type, am I missing something?空条件结果类型,我错过了什么吗?
【发布时间】:2015-11-11 00:22:32
【问题描述】:

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

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

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

【问题讨论】:

  • 请记住,输出是一个可为空的布尔值,与不可为空的布尔值相比,它允许隐式转换。

标签: c# resharper nullable


【解决方案1】:

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

Station?.SeparateJob 的计算结果为 bool?。 (必须如此,因为如果Stationnull,那么结果就是null。)不能对bool? 执行if 语句,并且不能将bool? 隐式转换为bool ,因此编译器会发出错误。

但是,Station?.SeparateJob == true 语句是允许的,因为可空类型可以比较与它们的不可空对应物。如果左侧是true,则此比较返回true,如果左侧是falsenull,则返回false。比较的结果是一个真正的bool(不可为空),所以 if 语句编译。

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

【讨论】:

  • 是的,这就是我观察到的行为。只是我对空条件操作数的理解是不需要它。
猜你喜欢
  • 2019-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-23
相关资源
最近更新 更多