C# Enum(Enumeration) із прикладом

⚡ Розумний підсумок

Перерахування в C# визначають іменований набір константних цілочисельних значень, таких як дні тижня, що спрощує читання та підтримку коду. Ключове слово enum оголошує ці фіксовані константи один раз для повторного використання в програмі.

  • 📐 Визначення: Ключове слово enum групує пов'язані іменовані константи в один тип, замінюючи розрізнені магічні числа читабельними ідентифікаторами.
  • 🗓️ Приклад днів: Перерахування під назвою Days зберігає дні тижня, а Days.Sun повертає вибраний член за його іменем.
  • 🔢 Базові цінності: Члени переліку відповідають цілим значенням, які починаються з нуля та збільшуються на одиницю, якщо не призначено власні числа.
  • 🔁 Конверсії: Явні приведення типів перетворюють перелік на ціле число, тоді як Enum.Parse та Enum.TryParse перетворюють текст назад на члени.
  • 🚩 Прапори: Атрибут Flags дозволяє одному переліку поєднувати кілька опцій як бітові поля за допомогою побітового оператора АБО.
  • 🤖 Допомога AI: GitHub Copilot та ML.NET допомагають генерувати визначення перерахувань та зіставляти перерахування з функціями машинного навчання.

C# Enum(Перерахування)

Перерахування C#

Перерахування використовується в будь-якій мові програмування для визначення постійного набору значень. Наприклад, дні тижня можна визначити як перелік і використати будь-де в програмі. У C# перерахування визначається за допомогою ключового слова 'enum'.

Давайте розглянемо приклад того, як ми можемо використовувати ключове слово 'enum'.

У нашому прикладі ми визначимо перелік днів, який буде використовуватися для зберігання днів тижня. Для кожного прикладу ми будемо змінювати лише основну функцію в нашому файлі Program.cs.

Перерахування C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program 
 {
  enum Days{Sun,Mon,tue,Wed,thu,Fri,Sat};
  
  static void Main(string[] args) 
  {
   Console.Write(Days.Sun);
   
   Console.ReadKey();
  }
 }
}

Code Пояснення:

  1. "перелік" тип даних вказується для оголошення переліку. Ім'я перерахування - дні. Як значення переліку вказуються всі дні тижня.
  2. Нарешті, функція console.write використовується для відображення одного зі значень переліку.

Якщо наведений вище код введено належним чином і програма виконана успішно, буде показано наступний вихід.

вихід:

Перерахування C#

З результату ви можете побачити, що значення «Sun» перерахування відображається на консолі.

Навіщо використовувати перерахування в C#?

Переліки роблять програму легшою для читання, безпечнішою та простішою в обслуговуванні. Замість розкидання незрозумілих чисел, які іноді називають магічними числами, по всьому коду, перелік надає кожному значенню описову назву, яка вказує на його призначення.

  • читаність: Назва, така як Days.Fri, набагато зрозуміліша, ніж число 5, тому кожен, хто читає код, одразу розуміє її значення.
  • Безпека типу: Змінна, оголошена з типом переліку, може містити лише один із визначених членів, що запобігає потраплянню недійсних значень.ping дюйм
  • Ремонтопридатність: Пов'язані константи знаходяться в одному місці, тому додавання або перейменування значення послідовно оновлює всю програму.
  • Прив'язка даних: Такі фреймворки, як WPF та ASP.NET, можуть прив'язувати перелік до випадаючого списку, що робить переліки корисними для створення користувацьких інтерфейсів.

Оскільки компілятор перевіряє кожне присвоєння на відповідність дозволеним членам, переліки також допомагають виявляти помилки на ранній стадії, ще до запуску програми.

Присвоєння користувацьких значень переліку C#

За замовчуванням C# присвоює першому члену переліку значення 0 та збільшує кожен наступний член на одиницю. У наведеному вище переліку Days Sun дорівнює 0, Mon дорівнює 1, а Sat дорівнює 6. Ви можете змінити ці значення за замовчуванням, призначивши явні числа.

  • Явні значення: Запис enum Level {Low = 1, Medium = 5, High = 10} встановлює кожному члену вибране число замість послідовності за замовчуванням.
  • Часткове завдання: Якщо присвоїти значення лише деяким членам, компілятор продовжить нумерацію, починаючи з останнього присвоєного значення, для наступних членів.
  • Базовий тип: Перелік за замовчуванням зберігає свої члени як цілі числа, але ви можете базувати його на типах byte, short або long, щоб заощадити пам'ять або розширити діапазон.

Користувацькі значення корисні, коли числа мають відповідати зовнішній системі, такій як коди бази даних або константи протоколу, щоб перерахування точно відображало реальні дані.

Як конвертувати перерахування C# у цілі числа, рядки та прапорці

У C# часто потрібно переміщувати значення перерахування в іншу форму, наприклад, зберігати його як число або зчитувати з тексту. Ці перетворення відбуваються кількома стандартними способами.

  • Перерахування в ціле число: Явне приведення типів, таке як (int)Days.Wed, повертає ціле число, яке корисне для зберігання або арифметичних дій.
  • int до перерахування: Приведення типів у іншому напрямку, наприклад, (Days)3, перетворює число назад на відповідний член переліку.
  • Рядок для перерахування: Enum.Parse та безпечніший Enum.TryParse перетворюють таке ім'я, як «Fri», на член Days.Fri без викидання недійсного тексту.
  • Перерахування в рядок: Виклик ToString для будь-якого члена повертає його ім'я, тому Days.Sun.ToString() створює «Sun» для відображення або реєстрації.
  • Учасники лістингу: Enum.GetValues ​​та Enum.GetNames повертають кожне значення або ім'я, що допомагає під час заповнення меню або перевірки введених даних.

Коли перерахування має представляти комбінацію варіантів, а не один, застосуйте атрибут Flags і надайте кожному члену степінь двох, наприклад, 1, 2, 4 та 8. Потім ви можете об'єднати члени за допомогою побітового оператора OR та перевірити наявність певного варіанта за допомогою методу HasFlag.

Ці методи перетворення дозволяють переліку чітко переміщатися між читабельними іменами, збереженими числами та комбінованими наборами прапорців, зберігаючиping решта програми є як типобезпечною, так і легкою для сприйняття.

Поширені запитання

Змінна перерахування за замовчуванням має значення 0, значення, що відповідає будь-якому члену, дорівнює 0. Якщо жоден член не дорівнює 0, змінна все ще містить значення 0, тому розробники часто спочатку визначають член None або Unknown, щоб уникнути плутанини.

Константа визначає одне іменоване значення, тоді як перелік групує пов'язаний набір іменованих констант під одним типом. Переліки також додають безпеку типів, оскільки змінна може містити лише один із визначених членів переліку.

Так. Перелік можна оголосити всередині простору імен або вкладити в клас чи структуру, що обмежує його область дії цим типом. Однак C# не дозволяє оголосити перелік всередині тіла методу.

Так. Два або більше членів можуть мати однакове базове число, що робить пізніші імена псевдонімами перших. Порівняння розглядає їх як рівні, а перетворення цього значення на рядок повертає ім'я, визначене першим у переліку.

Перелік – це тип значення, тому він зберігає свої дані безпосередньо, а не як посилання в купі. Він успадковується від System.Enum, але поводиться як інтегральний тип нижче, що пришвидшує копіювання та порівняння значень переліку.

Так. У ML.NET ви можете зіставити перелік з категоріальною ознакою або міткою, часто перетворюючи його на ціле значення або одноразове кодування. Строго типізовані переліки забезпечують чіткість та узгодженість вхідних стовпців конвеєра машинного навчання.

Так. GitHub Copilot пропонує повні визначення переліків, користувацькі значення, атрибути Flags та помічники перетворення, такі як Enum.TryParse, всередині Visual Studio та VS Code. Revпереглядайте кожну пропозицію, оскільки Copilot може вибирати значення або імена, які не відповідають вашому домену.

Використовуйте метод Enum.IsDefined, який повертає значення true, коли задане число або ім'я збігається з визначеним членом. Його поєднання з Enum.TryParse дозволяє безпечно перевіряти введені користувачем дані перед перетворенням тексту на значення переліку.

Підсумуйте цей пост за допомогою: