为什么我可以将枚举与null进行比较?

根据Microsoft的文档,通过将值类型标记为可为空,我可以将它们与null进行比较。在嵌套对象中使用空传播时,这特别有用。


但是,当比较我认为是值类型的特定枚举时,我仍然可以与null进行比较,如下所示:


public class NullColorComparer

{


    public bool CompareNullWithColor()

    {

        // This return false.

        return null == Color.Red;

    }

}


public enum Color

{

    Red,

    Blue

}

为什么这样做?编译是否应该因类型错误而失败?


蓝山帝景
浏览 253回答 3
3回答

慕村225694

null比较的一面被视为a&nbsp;Nullable<Program.Color>,它将进行编译,因为您可以将aNullable<WhatEver>与a进行比较WhatEver。但是,它将发出警告:警告CS0472表达式的结果始终为'false',因为类型'Program.Color'的值从不等于类型'Program.Color?'的'null'。

www说

C#编译器不会阻止比较。但是您会得到一个警告:“表达式的结果始终为'false',因为'Color'类型的值永远不会等于'Color'类型的'null'。”&nbsp;它可以让您进行比较,但表示总是错误的。对于任何值类型都是如此。您甚至可以将Int32值与null进行比较,您将获得相同的结果。无需编译时错误”
打开App,查看更多内容
随时随地看视频慕课网APP