c# – 枚举需要多少内存?

前端之家收集整理的这篇文章主要介绍了c# – 枚举需要多少内存?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Enum Size in Bytes1个
我需要决定是否在项目中使用我需要的大数组中的枚举.要做到这一点,我必须知道枚举变量的大小.
enum Player 
{ 
     First,Second,Third,Fourth 
};

private Player _owner;

_Verner会占用多少内存?

我没有在C#中找到关于此的正确信息,这就是为什么这个C和Java主题不适用的原因:How much memory do Enums take?

解决方法@H_301_11@
枚举值在编译时转换为基础类型的值.因此,基于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.

原文链接:https://www.f2er.com/csharp/244078.html

猜你在找的C#相关文章