Книга: C# для профессионалов. Том II
Перечисления
Перечисления
В C# можно определить перечисление с помощью синтаксиса, аналогичного синтаксису C++.
// допустимо в C++ или C#
enum TypeOfBuilding {Shop, House, OfficeBlock, School};
Отметим, однако, что заключительная точка с запятой в C# не обязательна, так как определение перечисления в C# является фактически определением структуры, а определения структур не требуют заключительной точки с запятой.
// допустимо только в C#
enum TypeOfBuilding {Shop, House, OfficeBlock, School}
Однако в C# перечисление должно быть именованным, в то время как в C++ задание имени для перечисления является необязательным. Также как в C++, элементы перечисления в C# нумеруются от нуля в сторону увеличения, если только специально не определено, что элемент должен иметь определенное значение.
enum TypeOfBuilding {Shop, House=5, OfficeBlock, School = 10}
// Shop будет иметь значение 0, OfficeBlock будет иметь значение 6
Способ, с помощью которого происходит доступ к значениям элементов, отличается в C#, так как в C# необходимо определять имя перечисления.
Синтаксис C++:
TypeOfBuilding MyHouse = House;
Синтаксис C#:
TypeOfBuilding MyHouse = TypeOfBuilding.House;
Можно рассматривать это как недостаток, так как синтаксис очень велик, не это в действительности отражает тот факт, что перечисления являются в C# значительно более мощными. В C# каждое перечисление является полноценной структурой производной из System.Enum
) и поэтому имеет некоторые методы. В частности, для любого перечисленного значения можно сделать следующее:
TypeOfBuilding MyHouse = TypeOfBuilding.House;
string Result = MyHouse.ToString(); // Result будет содержать "House"
Это почти невозможно сделать в C++.
В C# это делается и другим способом, с помощью статического метода Parse()
класса System.Enum
, хотя синтаксис будет чуть более запутанным
TypeOfВuilding MyHouse = (TypeOfBuilding)Enum.Parse(typeof(TypeOfBuilding), "House", true);
возвращает объектную ссылку и должен быть явно преобразован (распакован) обратно в соответствующий тип
Enum.Parse()enum
. Первым параметром в Parse()
является объект System.Тyре
, который описывает, какое перечисление должна представлять строка. Второй параметр является строкой, а третий параметр указывает, должен ли игнорироваться регистр символов. Вторая перегружаемая версия опускает третий параметр и не игнорирует регистр символов.
C# позволяет также выбрать описанный ниже тип данных, используемый для хранения enum
:
enum TypeOfBuiding : short {Shop, House, OfficeBlock, School};
Если тип не указан, компилятор будет предполагать по умолчанию int
.
- 9.6.2. Пример: типы-перечисления
- for...in - Цикл, используемый для перечисления свойств объекта
- 5.5.4.1. Порядок перечисления свойств
- A2.5.4. Константы-перечисления
- A8.4. Перечисления
- ГЛАВА 12 Интерфейсы, структуры и перечисления
- 6.1.1. Символы как перечисления
- 5.1. Оплата на расчетный счет по безналичному расчету
- 1.1. Дистанционный консалтинг
- Объявление переменной перечислимого типа
- 5.1.1. Электронные деньги