如果(Station?.SeparateJob)被标记,我不明白为什么。
Resharper对if(Station?.SeparateJob == true)感到满意,通常它会标记== true。
我认为null应该在这种情况下评估为假,但是我被告知我不能像这样把一个可以归结为bool。
答案 0 :(得分:3)
C#不允许将null
强制转换为false
,也不允许将可空类型强制转换为不可为空的对等类型。
Station?.SeparateJob
评估为bool?
。 (必须,因为如果Station
为null
,则结果为null
。)无法对bool?
和{{1}执行if语句无法隐式转换为bool?
,因此编译器会发出错误。
但是,允许使用语句bool
,因为可以将可空类型比较到它们的非可空对应项。如果左侧是Station?.SeparateJob == true
,则此比较会返回true
;如果左侧是true
或false
,则会返回false
。比较的结果是真null
(不可为空),因此if语句编译。
Resharper将标记您将bool
与bool
进行比较的情况(因为这是不必要的),但不会标记您将true
与true进行比较的情况(因为它是必需的)