Подтвердить что ты не робот

Получить имя перечисления, когда значение известно

У меня есть перечисление, в котором есть разные цвета. Я хотел бы передать некоторую функцию int и вернуть ей имя цвета, которое находится в перечислении в этой позиции.

Каким образом это сделать?

4b9b3361

Ответ 1

return ((MyEnumClass)n).ToString();

Ответ 2

Другой вариант - использовать статический метод GetName:

Enum.GetName(typeof(MyEnumClass), n);

Это имеет то преимущество, что код говорит сам за себя. Должно быть очевидно, что он возвращает имя перечисления (что может быть немного сложно реализовать, если вы используете, например, метод ToString).

Ответ 3

В С# 6 вы можете использовать nameof.

nameof(YourEnum.Something)

приводит к:

something

Ответ 4

Если ваше перечисление с цветами называется MyColorEnumName, попробуйте

Enum.GetName(typeof(MyColorEnumName),  enumColorValue)

Ответ 5

Если вы заботитесь о производительности, остерегайтесь использования каких-либо предложений, приведенных здесь: все они используют отражение, чтобы дать строковое значение для перечисления. Если строковое значение - это то, что вам нужно больше всего, вам лучше использовать строки. Если вам по-прежнему нужна безопасность типов, определите класс и коллекцию, чтобы определить свои "перечисления", а также присвоить классу echo его имя в переопределении ToString().

Ответ 6

Ниже приведен пример получения имени Enum на основе значения цвета.

  class Program
     {
          //Declare Enum
          enum colors {white=0,black=1,skyblue=2,blue=3 }
      static void Main(string[] args)
        {
          // It will return single color name which is "skyblue"
             string colorName=Enum.GetName(typeof(colors),2);

          //it will returns all the color names in string array.
          //We can retrive either through loop or pass index in array.
             string[] colorsName = Enum.GetNames(typeof(colors));

         //Passing index in array and it would return skyblue color name
             string colName = colorsName[2];

             Console.WriteLine(colorName);
             Console.WriteLine(colName);
             Console.ReadLine();
        }
    }