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