Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Перечисления (enum) в C#: объявление, использование и лучшие практики

Что такое перечисление

Перечисление (enum) — набор именованных целочисленных констант. Объявляется ключевым словом enum. Перечисления — типы-значения (value types), не поддерживают наследование.

Синтаксис объявления

enum <ИмяПеречисления>
{
    Идентификатор1,
    Идентификатор2,
    ...
}

По умолчанию первый элемент = 0, каждый следующий = предыдущий + 1. Базовый тип — int (можно изменить: enum Day : byte).

Пример базового enum

enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sun }; // Sun=0, Mon=1, ..., Sat=6

// Явное присваивание значений
enum StatusCode : byte
{
    OK = 200,
    NotFound = 404,
    ServerError = 500
}

// Флаги (для битовых операций)
[Flags]
enum FileAccess
{
    None = 0,
    Read = 1,      // 0b0001
    Write = 2,     // 0b0010
    Execute = 4,   // 0b0100
    ReadWrite = Read | Write // 3
}

Работа с enum

Days today = Days.Mon;
int dayNumber = (int)today; // 1

// Парсинг из строки
Days parsed = Enum.Parse("Friday"); // Days.Fri
bool isValid = Enum.TryParse("Monday", out Days d); // true

// Получение всех значений
foreach (Days d in Enum.GetValues())
    Console.WriteLine($"{d} = {(int)d}");

// Получение имён
string[] names = Enum.GetNames();

Атрибут [Flags]

Позволяет комбинировать значения побитово. Метод ToString() покажет комбинацию:

FileAccess access = FileAccess.Read | FileAccess.Write;
Console.WriteLine(access); // "Read, Write"
Console.WriteLine((int)access); // 3

// Проверка флага
bool canRead = (access & FileAccess.Read) != 0; // true
bool canExec = access.HasFlag(FileAccess.Execute); // false (C# 4.0+)

Преобразования

Лучшие практики

Пример из оригинала

using System;

namespace EnumApplication
{
    class EnumProgram
    {
        enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

        static void Main(string[] args)
        {
            int weekDayStart = (int)Days.Mon; // 1
            int weekDayEnd = (int)Days.Fri;   // 5
            Console.WriteLine($"Monday: {weekDayStart}");
            Console.WriteLine($"Friday: {weekDayEnd}");
            Console.ReadKey();
        }
    }
}

Результат:

Monday: 1
Friday: 5

Язык C

  1. C# Hello World — создание вашего первого C# приложения
  2. Понимание ключевых слов и идентификаторов C#: правила, списки и лучшие практики
  3. Мастерство C# переменных и примитивных типов данных: полное руководство
  4. Операторы C# — исчерпывающее руководство по операторам в C#
  5. Освоение побитовых и сдвиговых операторов в C#: полное руководство
  6. Основы ввода-вывода в C#: Console.WriteLine, ReadLine и форматирование
  7. Выражения, операторы и блоки в C#: подробное руководство с примерами
  8. Освоение комментариев в C#: виды, лучшие практики и XML-документация
  9. Освоение оператора switch в C#: синтаксис, примеры и лучшие практики
  10. Тернарный оператор в C#: краткое руководство по условным выражениям