Изучение сопоставления ключей и значений перечисления C#: методы и примеры кода

В C# перечисления (enums) — это мощные типы данных, позволяющие определять набор именованных констант. Каждое постоянное значение в перечислении имеет связанное с ним целочисленное значение, которое обычно начинается с нуля и увеличивается на единицу. Хотя перечисления обычно используются для представления набора связанных значений, их также можно использовать для установления сопоставлений «ключ-значение». В этой статье мы рассмотрим различные методы сопоставления ключей и значений с помощью перечислений в C#, а также приведем примеры кода.

Метод 1: связывание атрибутов со значениями перечисления
Один из подходов к установлению сопоставления ключ-значение — использование атрибутов. Вы можете определить пользовательские атрибуты и связать их с каждым значением перечисления. Вот пример:

public enum MyEnum
{
    [Description("Value 1")]
    EnumValue1,
    [Description("Value 2")]
    EnumValue2,
    [Description("Value 3")]
    EnumValue3
}
// Accessing the associated values
MyEnum enumValue = MyEnum.EnumValue1;
string value = enumValue.GetDescription(); // Returns "Value 1"

Метод 2: использование словаря.
Другой способ создать сопоставление ключ-значение с помощью перечислений — использовать словарь. Этот метод позволяет вам определять собственные значения для каждого значения перечисления. Вот пример:

public enum MyEnum
{
    EnumValue1,
    EnumValue2,
    EnumValue3
}
Dictionary<MyEnum, string> enumMap = new Dictionary<MyEnum, string>
{
    { MyEnum.EnumValue1, "Value 1" },
    { MyEnum.EnumValue2, "Value 2" },
    { MyEnum.EnumValue3, "Value 3" }
};
// Accessing the associated values
MyEnum enumValue = MyEnum.EnumValue2;
string value = enumMap[enumValue]; // Returns "Value 2"

Метод 3: использование методов расширения
Методы расширения позволяют расширить функциональность существующих типов, включая перечисления. Вы можете определить метод расширения, который возвращает связанное значение для значения перечисления. Вот пример:

public enum MyEnum
{
    EnumValue1,
    EnumValue2,
    EnumValue3
}
public static class MyEnumExtensions
{
    public static string ToValue(this MyEnum enumValue)
    {
        switch (enumValue)
        {
            case MyEnum.EnumValue1:
                return "Value 1";
            case MyEnum.EnumValue2:
                return "Value 2";
            case MyEnum.EnumValue3:
                return "Value 3";
            default:
                throw new ArgumentOutOfRangeException(nameof(enumValue), enumValue, null);
        }
    }
}
// Accessing the associated values
MyEnum enumValue = MyEnum.EnumValue3;
string value = enumValue.ToValue(); // Returns "Value 3"

В этой статье мы рассмотрели несколько методов создания сопоставлений «ключ-значение» с помощью перечислений в C#. Связывая атрибуты, используя словари или методы расширения, вы можете создавать гибкие и эффективные сопоставления, которые улучшают читаемость и удобство обслуживания вашего кода.