【发布时间】:2010-07-25 03:29:48
【问题描述】:
我有一个枚举,其中有不同的颜色。我想传递一些函数 int 并让它返回该位置的枚举中的颜色名称。
这样做的方法是什么?
【问题讨论】:
-
为什么不将枚举传递给方法呢?如果传入的 int 与您的枚举值不匹配,您期望结果是什么?
我有一个枚举,其中有不同的颜色。我想传递一些函数 int 并让它返回该位置的枚举中的颜色名称。
这样做的方法是什么?
【问题讨论】:
return ((MyEnumClass)n).ToString();
【讨论】:
另一种选择是使用GetName 静态方法:
Enum.GetName(typeof(MyEnumClass), n);
这样做的好处是代码不言自明。很明显,它返回了枚举的名称(例如,当您使用 ToString 方法时,这可能有点难以实现)。
【讨论】:
在 c# 6 中,您可以使用 nameof。
nameof(YourEnum.Something)
结果:
something
【讨论】:
如果您的带颜色的枚举名为MyColorEnumName,请尝试
Enum.GetName(typeof(MyColorEnumName), enumColorValue)
【讨论】:
如果您关心性能,请注意使用此处给出的任何建议:它们都使用反射为枚举提供字符串值。 如果字符串值是您最需要的,那么最好使用字符串。如果您仍然需要类型安全,请定义一个类和一个集合来定义您的“枚举”,并让该类在 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();
}
}
【讨论】:
((YourEnum)Value).ToString()
例如。
((MyEnum)2).ToString()
注意:要记住的一点,你的枚举应该用[Flag]修饰并且枚举值必须大于0。
【讨论】: