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

时间:2010-04-16 04:13:21

标签: c# types enums

有什么意义

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

当你必须进行强制转换只是为了将它分配给与枚举基础类型相同的变量类型时?

byte b = (byte)SomeEnum.SomeValue;

3 个答案:

答案 0 :(得分:13)

真的没那么重要,除非默认的基础类型(int)对你来说不够,即。你想使用更高的整数值,然后你可以使它long。如果您的[Flags]枚举值超过32,则此功能非常有用。

您可以将byteshort设为限制值范围,但实际上仍需要4个字节(即与int相同)。

答案 1 :(得分:3)

来自enum (C# Reference)

  

底层类型指定了多少   存储分配给每个   枚举。但是,一个明确的演员   需要从枚举类型转换为   一个完整的类型。

答案 2 :(得分:3)

除了技术原因之外......这里有一个设计原则。

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

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

强大的C#类型语言努力让你更难以超越编码“契约”这通常有助于使应用程序设计更好一点。

现在我当然不是说你没有时间参与实现细节,一个很好的例子就是一个对象关系映射器(ORM),你将C#数据类型映射到数据库数据类型,枚举是一个很好的例子,你必须知道它的存储类型来映射它。但在这些情况下,它的IMO不得不明确地投射或反映,它在评论中是一个很好的标志,在这里你特别踩到了通常的用法之外。