参见英文答案 >
Enum Size in Bytes1个
我需要决定是否在项目中使用我需要的大数组中的枚举.要做到这一点,我必须知道枚举变量的大小.
我需要决定是否在项目中使用我需要的大数组中的枚举.要做到这一点,我必须知道枚举变量的大小.
enum Player { First,Second,Third,Fourth }; private Player _owner;
_Verner会占用多少内存?
我没有在C#中找到关于此的正确信息,这就是为什么这个C和Java主题不适用的原因:How much memory do Enums take?
解决方法
枚举值在编译时转换为基础类型的值.因此,基于int类型(默认值)的枚举类型本身的变量不会使用比代码中任何其他int变量更多的内存.
Enum底层结构可以是以下任何一种:
>字节
> sbyte
>简短
> ushort
> int
> uint
>长
> ulong
由于您的Player枚举类型未指定基础时间,因此编译器会将其视为基于int的枚举.如果内存是一个问题,您可能需要考虑将其声明为从byte派生:
enum Player : byte { First,Fourth };
但请注意:新声明的Enum变量将具有与其基础类型的默认值相同的值,该值始终为零.在具有未指定的文字值的枚举中,列表中的第一项被假定为默认值.在你的情况下,那将是第一个:
private Player _owner; // this value will initially equals Player.First
您可能希望插入标记为None,Empty或Undefined的其他Player文字来表示Player变量的默认值:
enum Player : byte { Undefined = 0; First,Fourth }; private Player _owner; // this value will initially equals Player.Undefined
当然,如果您可以将First作为默认值,则可以保留原样.请注意,虽然没有专用的默认枚举值通常被认为是一种糟糕的编码习惯.
作为替代方案,因为任何枚举都是基于结构的,你也可以将你的_owner变量声明为Player?所以它默认为null:
private Player? _owner; // this value will initially equals null
总而言之,只需记住Enum文字只是作为其基础类型的常量.它们的目的是使代码更容易阅读,并在编译时强制执行一组有限的可能值.
有关更多信息,请查看documentation.