#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