Клас System.Enum. Зчислення (перелічення, перерахування)
Дана тема є взаємозв’язана з наступною темою:
Зміст
- 1. Клас System.Enum. Призначення. Огляд методів
- 2. Методи класу System.Enum
- 2.1. Метод GetName(). Отримати значення константи у вигляді рядка. Приклад
- 2.2. Метод GetNames(). Отримати масив імен констант зчислення. Приклад
- 2.3. Метод GetValues(). Отримати масив значень констант зчислення. Приклад
- 2.4. Метод Parse(). Конвертувати рядкове представлення зчислення в об’єкт. Приклад
- 3. Приклад використання класу System.Enum для визначення кількості днів у заданому місяці
- Зв’язані теми
Пошук на інших ресурсах:
1. Клас System.Enum. Призначення. Огляд методів
Клас System.Enum є базовим класом для зчислень, що використовуються у програмі. Якщо оголосити зчислення за зразком
enum EnumType { constant1, constant2, ..., constantN };
то створюється тип даних з іменем EnumType, який містить строго визначені константні імена constant1, constant2, …, constantN.
Для екземпляру типу EnumType та й для будь-якого іншого екземпляру, оголошеного з ключовим словом enum, стають доступними (успадковуються) наступні методи базового класу System.Enum:
- GetValues() – повертає масив значень констант у вказаному зчисленні у вигляді масиву типу System.Array;
- GetName() – повертає одиночне значення заданої константи у заданому зчисленні як рядок типу string;
- GetNames() – повертає масив імен констант типу string[] у вказаному зчисленні;
- Parse() – конвертує рядкове представлення імені або числового значення однієї або декількох констант зчислення в еквівалентний зчислювальний об’єкт.
⇑
2. Методи класу System.Enum
2.1. Метод GetName(). Отримати значення константи у вигляді рядка. Приклад
Метод GetName() дозволяє отримати значення константи з деякого зчислення у вигляді рядка. Згідно з документацією загальна форма методу наступна:
public static string GetName(System.Type enumType, object value);
тут
- System.Type – абстрактний клас, що представляє типи класів, інтерфейсів, масивів, значень, зчислень, параметрів, узагальнень;
- enumType – тип зчислення, для якого потрібно отримати ім’я значення;
- value – значення конкретної константи зі зчислення enumType.
Щоб в метод GetName() передати тип зчислення EnumType, потрібно використати засіб typeof() за зразком
typeof(EnumType)
При використанні методу можливі виключні ситуації наступних типів:
- System.ArgumentNullException – виникає, коли значення enumType або value рівні null;
- System.ArgumentException – виникає, коли значення enumType не є зчисленням або значення value не є типом enumType.
Приклад. У прикладі нижче отримується назва дня тижня, який встановлено у змінній d типу Days.
using System; namespace ConsoleApp12 { class Program { // Зчислення, що визначає дні тижня enum Days { Mon, Tue, Wed, Thi, Fri, Sat, Sun }; static void Main(string[] args) { // 1. Оголосити екземпляр зчислення Days d; // 2. Встановити день тижня вівторок d = Days.Tue; try { // 3. Отримати назву дня тижня у вигляді рядка string strDay = Enum.GetName(typeof(Days), d); // 4. Вивести назву дня тижня Console.WriteLine("strDay = {0}", strDay); // strDay = Tue } catch (System.ArgumentNullException e) { Console.WriteLine(e.Message); } catch(System.ArgumentException e) { Console.WriteLine(e.Message); } } } }
⇑
2.2. Метод GetNames(). Отримати масив імен констант зчислення. Приклад
Метод GetNames() дозволяє отримати масив типу string[], що містить імена констант заданого зчислення. Згідно з документацією загальна форма методу наступна:
public static string[] GetNames(System.Type enumType);
тут enumType – тип зчислення, для якого потрібно отримати рядкове представлення його констант.
При використанні методу можуть виникнути виключні ситуації:
- типу System.ArgumentNullException, якщо enumType рівне null;
- типу System.ArgumentException, якщо enumType не є зчисленням типу System.Enum.
Приклад.
using System; namespace ConsoleApp12 { class Program { // Зчислення, що описує оцінки enum Colors { Unsatisfactory = 2, Satisfactory = 3, Good = 4, Excellent = 5 }; static void Main(string[] args) { // 1. Оголосити змінну типу Colors Colors cl; // 2. Отримати імена зчислення cl try { string[] names; names = Enum.GetNames(typeof(Colors)); // 3. Вивести імена зчислення cl foreach (string name in names) Console.WriteLine(name); } catch (System.ArgumentNullException e) { Console.WriteLine(e.Message); } catch (System.ArgumentException e) { Console.WriteLine(e.Message); } } } }
Результат виконання програми
Unsatisfactory Satisfactory Good Excellent
⇑
2.3. Метод GetValues(). Отримати масив значень констант зчислення. Приклад
Значення цілочисельних чи рядкових констант зі зчислення можна отримати з допомогою методу GetValues(), який має наступну загальну форму:
public static System.Array GetValues(System.Type enumType);
тут
- System.Array – тип значень констант, що повертаються у вигляді динамічного масиву;
- System.Type – абстрактний клас, що представляє типи класів, інтерфейсів, масивів, значень, зчислень, параметрів, узагальнень;
- enumType – екземпляр зчислення типу System.Type.
При використанні методу можуть виникати виключні ситуації наступних типів:
- System.ArgumentNullException – випадок, коли enumType==null;
- System.ArgumentException – випадок, коли enumType не є зчисленням;
- System.InvalidOperationException – випадок, коли метод є викликаний відображенням в контексті “тільки відображення” або enumType є типом збірки, яка відображається в контексті “тільки відображення”.
Приклад. У прикладі з допмогою методів GetValues() та GetNames() виводяться імена та значення констант зі зчислення, яке описує кількість днів у визначеній порі року.
using System; namespace ConsoleApp12 { class Program { // Зчислення, що описує кількість днів у порі року. // Приймається, що в лютому 28 днів. enum Seasons { Winter = 90, Spring = 92, Summer = 92, Autumn = 91 }; static void Main(string[] args) { try { // 1. Оголосити змінну типу Seasons Seasons ss; // 2. Отримати значення констант зі зчислення ss Array values; values = Enum.GetValues(typeof(Seasons)); // 3. Отримати імена зі зчислення ss string[] names = Enum.GetNames(typeof(Seasons)); // 4. Вивести імена та значення зі зчислення ss for (int i = 0; i < names.Length; i++) Console.WriteLine("{0} = {1}", names[i], (int)values.GetValue(i)); } catch (ArgumentNullException e) { Console.WriteLine(e.Message); } catch (ArgumentException e) { Console.WriteLine(e.Message); } catch (InvalidOperationException e) { Console.WriteLine(e.Message); } } } }
Результат виконання програми
Winter = 90 Autumn = 91 Spring = 92 Summer = 92
⇑
2.4. Метод Parse(). Конвертувати рядкове представлення зчислення в об’єкт. Приклад
Метод Parse() дозволяє отримати окреме значення зі зчислення за його іменем. Метод має декілька перевантажених реалізацій. Згідно з документацією загальна форма деяких реалізацій методу наступна:
public static object Parse(System.Type enumType, string value); public static object Parse(System.Type enumType, string value, bool ignoreCase)
тут
- enumType – змінна типу зчислення;
- value – рядкове представлення значення зі зчислення, яке потрібно конвертувати;
- ignoreCase – прапорець, що визначає чи потрібно ігнорувати регістр символів (true).
При використанні методу можливі виключні ситуації наступних типів:
- System.ArgumentNullException – випадок, коли enumType = null;
- System.ArgumentException – генерується у випадках, коли enumType не є типу System.Enum або value не входить в перелік констант зчислення enumType;
- System.OverflowException – значення є за межами діапазону типу enumType.
Приклад. У прикладі описується зчислення Corners, що містить кількість кутів популярної фігури. З допомогою методу Parse() демонструється визначення кількості кутів шестикутника (Hexagon). При звертанні до імені фігури у зчисленні, не враховується регістр символів.
using System; namespace ConsoleApp12 { class Program { // Зчислення, що визначає кількість кутів у фігурі enum Corners { Triangle = 3, Circle = 0, Rectangle = 4, Hexagon = 6, Pentagon = 5 }; static void Main(string[] args) { try { // Отримати кількість кутів шестикутника, ігнорувати регістр символів int nCorners = (int)System.Enum.Parse(typeof(Corners), "HEXAGON", true); Console.WriteLine("nCorners = {0}", nCorners); } catch (ArgumentNullException e) { Console.WriteLine(e.Message); } catch(ArgumentException e) { Console.WriteLine(e.Message); } catch(StackOverflowException e) { Console.WriteLine(e.Message); } } } }
Результат виконання програми
nCorners = 6
⇑
3. Приклад використання класу System.Enum для визначення кількості днів у заданому місяці
Умова задачі. Розробити програму, яка за введеним номером місяця виводить кількість днів у цьому місяці.
Розв’язок. З метою демонстрації, у програмі використовуються можливості класу System.Enum для отримання значень зі зчислення Months.
using System; namespace ConsoleApp12 { class Program { // Оголошення типу зчислення Months, яке описує місяці року // всередині класу. // Jan = 1, Feb = 2, Mar = 3, Apr = 4 , ..., Dec = 12 enum Months { Jan = 1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec }; static void Main(string[] args) { // Вивести кількість днів у місяці, // використати змінну типу Enum Console.WriteLine("Enter number of month (1..12):"); int month = Int32.Parse(Console.ReadLine()); // перевірка, чи коректно введений місяць if ((month < 1) || (month > 12)) { Console.WriteLine("Wrong input."); return; } Months MN; // змінна типу Months // Ініціалізувати MN значенням на основі змінної month. // Метод Enum.GetValues() повертає клас System.Array. // У класі System.Array є метод GetValue(), який повертає // значення об'єкту за індексом (0..11). MN = (Months)Enum.GetValues(typeof(Months)).GetValue(month - 1); switch (MN) { case Months.Feb: Console.WriteLine("28 (29) days"); break; case Months.Apr: case Months.Jun: case Months.Sep: case Months.Nov: Console.WriteLine("30 days"); break; default: Console.WriteLine("31 days"); break; } } } }
Результат виконання програми
Enter number of month (1..12): 5 31 days
⇑
Зв’язані теми
⇑