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

有什么意义

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

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

 byte b = (byte)SomeEnum.SomeValue; 

真的没什么意义,只是如果默认的底层类型( int )对你来说还不够,即。 你想使用更高的整数值,那么你可以使它long 。 当[Flags]枚举值超过32时,这可能很有用。

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

来自enum(C#参考)

基础类型指定为每个枚举器分配多少存储空间。 但是,需要显式转换才能从枚举类型转换为整数类型。

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

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

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

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

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