Сколько памяти занимает перечисление?
4405 просмотра
1 ответ
Мне нужно решить, буду ли я использовать enum
s в большом массиве, который мне нужен в моем проекте. Для этого я должен знать, каков размер enum
переменной.
enum Player
{
First,
Second,
Third,
Fourth
};
private Player _owner;
Сколько памяти _owner
займет?
Я не нашел правильной информации об этом в C #, поэтому эта тема C ++ и Java не применима: сколько памяти занимает Enums?
Автор: Michał Источник Размещён: 12.11.2019 09:03Ответы (1)
14 плюса
Enum
значения преобразуются в значения базового типа во время компиляции. Следовательно, переменная самого перечислимого типа, основанная на int
типе (который используется по умолчанию) , не использует больше памяти, чем любая другая int
переменная в вашем коде.
Enum
, Лежащая в основе структура может быть любой из следующих:
byte
sbyte
short
ushort
int
uint
long
ulong
Так как ваш Player
тип перечисления не определяет базовое время, компилятор увидит его как int
-based Enum
. Если память вызывает беспокойство, вы можете рассмотреть возможность объявления ее как производной от byte
:
enum Player : byte
{
First,
Second,
Third,
Fourth
};
Будьте осторожны: вновь объявленная Enum
переменная будет иметь то же значение, что и значение по умолчанию ее базового типа, которое всегда будет нулевым. В перечислении с неопределенными литеральными значениями первый элемент в списке считается значением по умолчанию. В вашем случае это будет First
:
private Player _owner; // this value will initially equals Player.First
Вы можете вставить дополнительные Player
буквальный маркированы None
, Empty
или Undefined
представлять Player
значение переменного по умолчанию:
enum Player : byte
{
Undefined = 0;
First,
Second,
Third,
Fourth
};
private Player _owner; // this value will initially equals Player.Undefined
Конечно, если вы согласны First
со значением по умолчанию, вы можете оставить его как есть. Имейте в виду, что отсутствие выделенного Enum
значения по умолчанию часто считается плохой практикой кодирования.
В качестве альтернативы, поскольку любые из Enum
них основаны на структуре, вы также можете объявить свою _owner
переменную Player?
так, чтобы она вместо этого была null
по умолчанию:
private Player? _owner; // this value will initially equals null
Подводя итог, просто помните, что Enum
литералы просто действуют как константы для своего базового типа. Их цель - облегчить чтение кода и обеспечить ограниченный набор возможных значений во время компиляции.
Для получения дополнительной информации смотрите документацию .
Автор: Crono Размещён: 31.03.2014 05:50Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- .net Как создать новый экземпляр объекта из Типа
- .net Действительно ли опечатанные классы действительно предлагают преимущества?
- memory Setting Objects to Null/Nothing after use in .NET
- memory Предотвращение утечек памяти с прикрепленным поведением
- memory CLR Profiler - Присоединение к существующему процессу
- memory Как определить размер моего массива в C?
- types В чем разница между строкой и строкой в ??C #?
- types В чем разница между старым и новым стилем классов в Python?
- types Что хорошего в дженериках, зачем их использовать?
- enums Что означает атрибут Enum [Flags] в C #?
- enums Проверить перечисление значений
- enums Преобразовать строку в перечисление в C #
- enums Приведите int к перечислению в C #