C # enum — это null?

#c# #user-controls #enums

#c# #пользовательские элементы управления #перечисления

Вопрос:

У меня есть следующий код в пользовательском элементе управления:

 public partial class MyControl : System.Web.UI.UserControl
{    
    public Enums.InformationSubCategory SubCategory { get; set; }

    ...omitted code
}
  

Enums.InformationSubCategory это enum то, что я определил в другом месте, с идеей, что я могу это сделать:

 Example 1. <my:MyControl runat="server" SubCategory="Food" ...... />
Example 2. <my:MyControl runat="server" ...... />
  

Если я вообще не укажу значение для SubCategory , для чего будет указано значение подкатегории в коде MyControl ? Это null или к нему применяется значение по умолчанию? Я заметил, что в int свойствах по умолчанию оно равно нулю.

Ответ №1:

Поля инициализируются default(T) . Самый простой способ запомнить, какое значение по умолчанию для некоторого типа соответствует двоичному нулю в очевидной реализации.

Для перечисления это означает, что базовый целочисленный тип имеет значение 0. По умолчанию это соответствует первому значению, определенному в перечислении.

Вот почему принято называть первое значение в перечислении None .

Комментарии:

1. ‘первое значение, определенное в перечислении’ — при условии, что явное значение не было присвоено, т.е.. enum Foo { Bar = 1, None = 0 }

2. Да, именно поэтому я сказал «По умолчанию».

3. @CodeInChaos Что, если я присвоил ненулевые целые числа всем элементам перечисления?

4. Тогда оно все равно станет 0. Это неназванное значение. Перечисления могут иметь все значения базового целочисленного типа, даже те, у которых нет имени.

Ответ №2:

Базовый тип элементов перечисления по умолчанию — int . По умолчанию первый счетчик имеет значение 0, а значение каждого последующего счетчика увеличивается на 1. Например:

 enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};
  

В этом перечислении Sat равно 0, Sun равно 1, Mon равно 2 и так далее. У счетчиков могут быть инициализаторы для переопределения значений по умолчанию.

 enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
  

В этом перечислении последовательность элементов принудительно начинается с 1 вместо 0.

Комментарии:

1. Отличное объяснение на enum s, но не отвечает на вопрос!

Ответ №3:

Это будет 0, так как ваш enum по умолчанию основан на Int32 .

Комментарии:

1. Это будет 0, но это может быть байт или короткий.

2. @Henk — Вот почему я сказал «по умолчанию».

3. Да, вы правы. Я думал, что компилятор волен выбирать. msdn.microsoft.com/en-us/library/cc138362.aspx