У меня есть перечисление, в котором есть разные цвета. Я хотел бы передать некоторую функцию int и вернуть ей имя цвета, которое находится в перечислении в этой позиции.
Каким образом это сделать?
У меня есть перечисление, в котором есть разные цвета. Я хотел бы передать некоторую функцию int и вернуть ей имя цвета, которое находится в перечислении в этой позиции.
Каким образом это сделать?
return ((MyEnumClass)n).ToString();
Другой вариант - использовать статический метод GetName:
Enum.GetName(typeof(MyEnumClass), n);
Это имеет то преимущество, что код говорит сам за себя. Должно быть очевидно, что он возвращает имя перечисления (что может быть немного сложно реализовать, если вы используете, например, метод ToString).
В С# 6 вы можете использовать nameof.
nameof(YourEnum.Something)
приводит к:
something
Если ваше перечисление с цветами называется MyColorEnumName, попробуйте
Enum.GetName(typeof(MyColorEnumName), enumColorValue)
Если вы заботитесь о производительности, остерегайтесь использования каких-либо предложений, приведенных здесь: все они используют отражение, чтобы дать строковое значение для перечисления. Если строковое значение - это то, что вам нужно больше всего, вам лучше использовать строки. Если вам по-прежнему нужна безопасность типов, определите класс и коллекцию, чтобы определить свои "перечисления", а также присвоить классу echo его имя в переопределении ToString().
Ниже приведен пример получения имени 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();
}
}