переменные enum всегда инициализируются? - PullRequest
2 голосов
/ 23 марта 2011

Мне понадобится переменная типа enum, которая не будет автоматически инициализирована значением первого элемента. Есть ли способ, как это сделать?

Ответы [ 6 ]

6 голосов
/ 23 марта 2011

Переменные перечисления не всегда инициализируются первым значением перечисления.

Например, переменные типа instance / static, они инициализируются значением «0» перечисления, которое не может быть именованным значением, например,

enum Color
{
    Red = 1,
    Blue = 2,
    Green = 3
}

Color c; // This will be 0

Локальные переменные не инициализируются автоматически - их необходимо обязательно назначить до первой точки, в которой они могут быть прочитаны, как и любую другую переменную.

Не совсем понятно, чего вы пытаетесь достичь - если бы вы могли дать более подробную информацию о контексте, это очень помогло бы. Использование значения типа Nullable может быть тем, что вы хотите, или вы можете просто захотеть принудительно инициализировать в конструкторе, например.

4 голосов
/ 23 марта 2011

Технически перечисление инициализируется 0, а не первым значением:

enum Test {
    Second = 1,
    Third = 2
}

Test test;

void Main()
{
    Console.WriteLine("{0}", (int)test);
}

// Result: 0

Из MSDN: The default value of an enum E is the value produced by the expression (E)0. http://msdn.microsoft.com/en-us/library/sbbt4032(v=vs.80).aspx

3 голосов
/ 23 марта 2011

Нет, если вы не используете Nullable<SomeEnum>.

2 голосов
/ 23 марта 2011

Перечисление имеет базовый тип данных int (по умолчанию) и точно так же, как int wi всегда инициализируется, так же как и перечисление.

Лучше всего добавить значение Uninitialized в качестве первой записи в перечислении.

Так например

public enum MyEnum{ Uninitialized, EnumValue1, EnumValue2, ... };

Затем создайте его экземпляр

MyEnum enumInstance;

Теперь он все еще будет инициализирован первым элементом в перечислении, но вы также знаете, что это означает, что вы еще не инициализировали его.

2 голосов
/ 23 марта 2011

Вы можете сделать его обнуляемым

0 голосов
/ 23 марта 2011

Ключевое слово enum используется для объявления перечисления, особого типа, состоящего из набора именованных констант, называемых списком перечислителя.

Если вы хотите представить неизвестное значение в перечислении, вы можете сделать это, добавив элемент Unknown со значением 0.
Вы можете объявить поле как Nullable< MyNullableEnum >

Aполезная ссылка:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...