В 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#. Связывая атрибуты, используя словари или методы расширения, вы можете создавать гибкие и эффективные сопоставления, которые улучшают читаемость и удобство обслуживания вашего кода.