概念
枚举的基础类型是整型,因此,如下的定义方式是错误的。
enum Colors
{
Red = "red",
Green = "green",
Blue = "blue",
}
正确的定义方式如下:
enum Colors
{
Unknown = -1,
Red = 0,
Green = 1,
Blue = 3,
}
从整数到枚举的转换
int status = 3;
Rainbow rainbow;
if (Enum.IsDefined(typeof(Rainbow), status))
{
rainbow = (Rainbow)3;
} else
{
rainbow = Rainbow.Unknown;
}
注意:对待转换的整数要做检查,防止枚举中没有对应的数值。
检索枚举成员名称
string[] names = Enum.GetNames(typeof(Rainbow));
foreach(string name in names)
{
Rainbow value = (Rainbow)Enum.Parse(typeof(Rainbow), name);
Console.WriteLine("{0}:{1:D}", name, value);
}
var values = Enum.GetValues(typeof(Rainbow));
foreach(Rainbow value in values)
{
Console.WriteLine("{0}:{1:D}", value, value);
}
作为参数类型约束的枚举
首先定义一个彩虹七色枚举
enum Rainbow
{
Red,
Orange,
Yellow,
Green,
Blue,
Indigo,
Violet
}
泛型必须是枚举类型
public static Dictionary<int, string> EnumNamedValues<T>() where T : Enum
{
var result = new Dictionary<int, string>();
var values = Enum.GetValues(typeof(T));
foreach (int item in values)
{
result.Add(item, Enum.GetName(typeof(T), item)!); // 加了一个 !
}
return result;
}
遍历获取枚举 key 或者 枚举 value
var map = EnumNamedValues<Rainbow>();
foreach(var pair in map)
{
Console.WriteLine($"{pair.Key}:\t{pair.Value}");
}