C# Enum (перечисление) с примером

⚡ Умное резюме

В C# перечисления определяют именованный набор постоянных целочисленных значений, таких как дни недели, что упрощает чтение и сопровождение кода. Ключевое слово `enum` объявляет эти фиксированные константы один раз для повторного использования в программе.

  • 📐 Определение: Ключевое слово enum группирует связанные именованные константы в один тип, заменяя разрозненные «магические числа» читаемыми идентификаторами.
  • 🗓️ Пример количества дней: Перечисление Days хранит дни недели, а метод Days.Sun возвращает выбранный элемент по его имени.
  • 🔢 Основные ценности: Члены перечисления соответствуют целочисленным значениям, которые начинаются с нуля и увеличиваются на единицу, если не заданы пользовательские числа.
  • 🔁 Конверсии: Явное приведение типов преобразует перечисление в целое число, а методы Enum.Parse и Enum.TryParse преобразуют текст обратно в элементы перечисления.
  • 🚩 Флаги: Атрибут Flags позволяет одному перечислению объединять несколько параметров в виде битовых полей с помощью побитового оператора ИЛИ.
  • 🤖 Помощь ИИ: GitHub Copilot и ML.NET помогают генерировать определения перечислений и сопоставлять перечисления с признаками машинного обучения.

C# Enum(Enumeration)

Перечисление С#

Перечисление используется в любом языке программирования для определения постоянного набора значений. Например, дни недели можно определить как перечисление и использовать в любом месте программы. В C# перечисление определяется с помощью ключевого слова enum.

Давайте посмотрим пример того, как мы можем использовать ключевое слово enum.

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

Перечисление С#

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. «Перечисление» тип данных указывается для объявления перечисления. Имя перечисления — Days. Все дни недели указаны как значения перечисления.
  2. Наконец, функция console.write используется для отображения одного из значений перечисления.

Если приведенный выше код введен правильно и программа выполнена успешно, будет отображен следующий вывод.

Выход:

Перечисление С#

Из вывода вы можете видеть, что значение перечисления «Sun» отображается в консоли.

Зачем использовать перечисления (enums) в C#?

Перечисления делают программу более читабельной, безопасной и простой в сопровождении. Вместо того чтобы разбрасывать по коду непонятные числа, иногда называемые магическими числами, перечисление присваивает каждому значению описательное имя, указывающее на его назначение.

  • Читаемость: Название типа Days.Fri гораздо понятнее, чем число 5, поэтому любой, кто читает код, сразу понимает его смысл.
  • Тип безопасности: Переменная, объявленная с использованием перечисления (enum), может содержать только один из определенных элементов, что предотвращает появление недопустимых значений.ping дюйм
  • Ремонтопригодность: Связанные константы находятся в одном месте, поэтому добавление или переименование значения приводит к согласованному обновлению всей программы.
  • Привязка данных: Такие фреймворки, как WPF и ASP.NET, позволяют привязывать перечисление к выпадающему списку, что делает перечисления полезными при создании пользовательских интерфейсов.

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

Присвоение пользовательских значений перечислению C#

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

  • Явные значения: Использование перечисления Level {Low = 1, Medium = 5, High = 10} присваивает каждому элементу выбранное числовое значение вместо последовательности по умолчанию.
  • Частичное задание: Если вы присвоите значение только некоторым членам, компилятор продолжит нумерацию, начиная с последнего присвоенного значения, для последующих членов.
  • Основной тип: В перечислениях (enum) по умолчанию элементы хранятся как целые числа (int), но для экономии памяти или расширения диапазона можно использовать типы данных: byte, short или long.

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

Как преобразовать перечисления C# в целые числа, строки и флаги

В C# часто возникает необходимость преобразовать значение перечисления в другую форму, например, сохранить его как число или прочитать из текста. Эти преобразования происходят несколькими стандартными способами.

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

Если перечисление должно представлять собой комбинацию вариантов, а не один, примените атрибут Flags и присвойте каждому элементу степень двойки, например, 1, 2, 4 и 8. Затем вы можете комбинировать элементы с помощью побитового оператора ИЛИ и проверять наличие конкретного варианта с помощью метода HasFlag.

Эти методы преобразования позволяют перечислению беспрепятственно перемещаться между читаемыми именами, сохраненными числами и комбинированными наборами флагов, сохраняя при этомping Остальная часть программы является типобезопасной и простой в использовании.

Часто задаваемые вопросы (FAQ)

Переменная перечисления по умолчанию принимает значение 0, которое присваивается тому члену, который равен 0. Если ни один член не равен 0, переменная всё равно будет содержать 0, поэтому разработчики часто сначала определяют член None или Unknown, чтобы избежать путаницы.

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

Да. Перечисление (enum) может быть объявлено внутри пространства имен или вложено в класс или структуру, что ограничивает его область видимости этим типом. Однако C# не допускает объявления перечисления внутри тела метода.

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

Перечисление (enum) — это тип значения, поэтому оно хранит свои данные напрямую, а не в виде ссылки в куче. Оно наследует от System.Enum, но ведёт себя как целочисленный тип, что делает копирование и сравнение значений перечисления быстрыми.

Да. В ML.NET можно сопоставить перечисление с категориальным признаком или меткой, часто путем преобразования его в целочисленное значение или с помощью one-hot кодирования. Строго типизированные перечисления обеспечивают ясность и согласованность входных столбцов конвейера машинного обучения.

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

Используйте метод Enum.IsDefined, который возвращает true, если заданное число или имя совпадает с определенным элементом. В сочетании с Enum.TryParse он позволяет безопасно проверять ввод пользователя перед преобразованием текста в значение перечисления.

Подведем итог этой публикации следующим образом: