空条件结果类型,我错过了什么?

时间:2015-11-11 00:22:33

标签: c# resharper nullable

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

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

我认为null应该在这种情况下评估为假,但是我被告知我不能像这样把一个可以归结为bool。

1 个答案:

答案 0 :(得分:3)

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

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

但是,允许使用语句bool,因为可以将可空类型比较到它们的非可空对应项。如果左侧是Station?.SeparateJob == true,则此比较会返回true;如果左侧是truefalse,则会返回false。比较的结果是真null(不可为空),因此if语句编译。

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