代码之家  ›  专栏  ›  技术社区  ›  Marlon

在枚举中指定基础类型的用例是什么?

  •  18
  • Marlon  · 技术社区  · 15 年前

    有什么意义

    enum SomeEnum : byte // <----
    {
      SomeValue = 0x01,
      ...
    }
    

    当必须进行强制转换才能将其分配给与枚举基础类型相同的变量类型时?

    byte b = (byte)SomeEnum.SomeValue;
    
    3 回复  |  直到 15 年前
        1
  •  13
  •   EMP    15 年前

    实际上,没有太多意义,除非默认的基础类型( int )对您来说是不够的,也就是说,您希望使用比这更高的整数值,然后您就可以使它 long . 当你有一个 [Flags] 超过32个值的枚举。

    你可以做到 byte short 只是为了限制值的范围,但实际上它仍然需要4个字节(即 int )

        2
  •  3
  •   Adriaan Stander    15 年前

    enum (C# Reference)

    基础类型指定多少 存储分配给每个 枚举器。但是,一个显式的强制转换 需要从枚举类型转换为 积分型。

        3
  •  3
  •   Tim Jarvis    15 年前

    除了技术原因…这里有一个设计原则。

    将枚举指定为具有字节存储是一个实现细节。使用枚举是另一个问题,您不必知道或关心它的实现细节。

    在客户机代码中,使用枚举的事实应该意味着您实际上是在使用枚举,而不是字节或长等。否则,为什么不使用您所指的数据类型呢?

    强类型语言,如C努力使它更难走出你的编码“契约”,这通常有助于使应用程序设计更好一点。

    当然,我并不是说有时您不必涉及实现细节,一个很好的例子是在对象关系映射器(ORM)中,您要将C数据类型映射到数据库数据类型,而枚举就是一个很好的例子,您必须知道它的存储类型才能映射它。但是在这些情况下,必须明确地投射或反射是很好的,在评论中这是一个很好的标志,在这里你是特别地超越了通常的用法。