首页 > 解决方案 > 为什么我可以将枚举与 null 进行比较?

问题描述

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

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

public class NullColorComparer
{

    public bool CompareNullWithColor()
    {
        // This return false.
        return null == Color.Red;
    }
}

public enum Color
{
    Red,
    Blue
}

为什么这行得通?编译不应该因类型错误而失败吗?

标签: c#

解决方案


枚举在比较之前被强制转换为它的可为空版本,因此它可以并且将评估。然而结果总是一样的。

这就是编译器警告您的原因:

警告 CS0472 表达式的结果始终为“假”,因为“颜色”类型的值永远不会等于“颜色”类型的“空”?

虽然比较没有用,但编译器不会阻止您执行它。就像它不会阻止您制作 aif(false) { }一样,这同样没用。


推荐阅读