加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 08:34:37 所属栏目:百科 来源:网络整理
导读:参见英文答案 Enum Size in Bytes1个 我需要决定是否在项目中使用我需要的大数组中的枚举.要做到这一点,我必须知道枚举变量的大小. enum Player { First,Second,Third,Fourth };private Player _owner; _Verner会占用多少内存? 我没有在C#中找到关于此的正
参见英文答案 > 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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读