没有用于enum-int的操作符,但用于enum-0的操作符

本文关键字:操作符 用于 enum-0 enum-int | 更新日期: 2023-09-27 18:02:50

我想解析一个二进制文件。

我有3种有效的格式。在二进制文件中,格式用short表示。但只能是0,1,2

我创建了enum来描述这些格式。

当我写这段代码时,我看到了这个编译错误:

操作符'>'不能用于enumint的操作数。

    public enum FormatType
    {
        Type0 = 0,
        Type1 = 1,
        Type2 = 2
    }
    private FormatType _format;
    public FormatType Format
    {
        get { return _format; }
        set
        {
            // red line under value > 2.
            if (value < 0 || value > 2) throw new FileParseException(ParseError.Format);
            _format = value;
        }
    }

但是value < 0没有问题。

后来我发现我可以将enum与0进行比较,但不能与其他数字进行比较。

为了解决这个问题,我可以将int类型强制转换为enum。

value > (FormatType)2

但是与0比较时不需要强制转换,为什么?

value < 0

没有用于enum-int的操作符,但用于enum-0的操作符

你需要将枚举转换为整型:

    public FormatType Format
    {
        get { return _format; }
        set
        {
            // red line under value > 2.
            if (value < 0 || (int)value > 2) throw new FileParseException(ParseError.Format);
            _format = value;
        }
    }

编辑:字面值0将始终隐式转换为任何enum,以确保您能够将其初始化为其默认值(即使没有值为0的enum)

发现这些链接可以更好地解释它:

http://blogs.msdn.com/b/ericlippert/archive/2006/03/29/the-root-of-all-evil-part-two.aspxhttp://blogs.msdn.com/b/ericlippert/archive/2006/03/28/563282.aspx