Клас System.Enum

Системний клас Enum надає статичні методи для роботи з перерахуваннями. Розглянемо найбільш часто використовувані з них.

Визначення типу перерахування

Метод GetUnderlyingType дозволяє отримати тип даних, який лежить в основі перерахування:

enum BackColor : long
{
    Gray,
    Orange,
    Aqua
}

static void PrintType()
{
    var bc = BackColor.Gray;
    Type initialType = Enum.GetUnderlyingType(bc.GetType());
    Console.WriteLine(initialType); //System.Int64
}

Конвертування числа в константу перерахування

Метод ToObject конвертує цілочисельне значення в екземпляр перерахування вказаного типу:

object o = Enum.ToObject(typeof(BackColor), 1); 
Console.WriteLine(o); // Orange

Форматований вивід

Format надає можливість форматованого конвертування перерахування в рядок.

В якості параметрів приймає тип, значення та формат представлення даних у вигляді рядкової змінної:

  • G – формат представлення за замовчуванням;
  • F – розглядає перерахування як бітові флажки;
  • D – виводить числове значення перерахування в десятковій системі числення;
  • X – числове представлення в шістнадцятковій системі.

Рядок формату не чутливий до регістру.

enum Lang : ulong
{
    Ukr,
    Rus,
    Eng
}

static void ShowEnum()
{
    var a = Enum.Format(typeof(Lang), Lang.Ukr, "G"); //Ukr 
    var b = Enum.Format(typeof(Lang), Lang.Rus, "D"); //1 

    Console.WriteLine($"{a}\r\n{b}");
}

Перетворення рядка

Метод Parse конвертує рядок в перерахування вказаного типу, рядок і тип передаються в якості аргументів, параметр ignoreCase визначає чутливість методу до регістру рядкової змінної:

enum Flag : byte
{
    NotSet,
    Ok,
    Error
}

static void Main(string[] args)
{
    var temp = (Flag)Enum.Parse(typeof(Flag), "error", ignoreCase: true);
}

Перевірка наявності значення в перерахуванні

Для перевірки існування цілочислового чи рядкового значення в перерахуванні використовується метод IsDefined, він повертає логічне true якщо значення знайдено, та false в іншому випадку.

enum Pet : uint
{
    None = 0,
    Dog = 1,
    Cat = 2
}

static void Main(string[] args)
{
    Console.WriteLine($"{Enum.IsDefined(typeof(Pet), "Cat")}"); //true
    Console.WriteLine($"{Enum.IsDefined(typeof(Pet), 6)}"); //false
}

Перевірка флажка

В попередній статті ми розглядали бітові флажки, там для перевірки використовувалась конструкція з логічним І, однак C# має метод HasFlag для перевірки наявності встановленого флажка в екземплярі:

[Flags]
enum Anchor : int
{
    Left = 0b0001,
    Top = 0b0010,
    Bottom = 0b0100,
    Right = 0b1000
}

static void Main(string[] args)
{
    var topLeft = Anchor.Top | Anchor.Left;
    if (topLeft.HasFlag(Anchor.Left))
    {
        Console.WriteLine("Flag present");
    }
}

Масив імен констант

enum Color
{ 
    White = 0,
    Red,
    Green,
    Blue,
    Black
}

Для отримання назв всіх констант з перерахування використовується метод GetNames:

foreach(string item in Enum.GetNames(typeof(Color)))
    Console.WriteLine(item);

Для отримання одного імені по значенню, можна використовувати метод GetName:

string name = Enum.GetName(typeof(Color), 2); //Green

Дивіться також: