每个枚举都继承至System.Enum,System.Enum继承至System.ValueType,System.ValueType又继承至System.Object
枚举是值类型,枚举不能有方法,属性和事件。
枚举其实就是定义一组常量字段的结构体。
编译器对待枚举类似如下代码
struct Color : System.Enum
{
public const Color Red = (Color) 0;
public const Color Red = (Color) 1;
public const Color Red = (Color) 2;
public const Color Red = (Color) 3;
}
1.GetUnderlyingType
//返回枚举类型实例值的基础类型
static Type GetUnderlyingType(Type enumType);
//枚举类型实例值的基础类型就是这个枚举索引的类型
//枚举类型实例值的基础类型为byte的枚举
enum Color : byte
{
Red,
Green,
}
2.Format
//format参数:G字符串,D十进制,X十六进制,默认是字符串
public static string Format(Type enumType,object value,string format);
//相比ToString()方法的优势:Format可以传递枚举的数值形式
//output "Blue"
Console.WriteLine(Enum.Format(typeof(Color),2,"G"));
3.GetValues
//获得枚举类型中所有符号
static Array GetValues(Type enumType);
Color[] colors = (Color[])Enum.GetValues(typeof(Color));
foreach(Color c in colors)
{
Console.WriteLine("{0,5:D}\t{0:G}",c);
}
//output
//0 Red
//1 Green
4.GetName,GetNames
//返回数字的字符串表达形式
public static string GetName(Type enumType,object value);
//返回该枚举类型的所有数字的字符串表达形式
public static string[] GetName(Type enumType);
5.Parse
//查询字符串符号对应的数值,ignoreCase参数表示是否区分大小写
public static object Pares(Type enumType,string value,bool ignoreCase);
//0
Color c = (Color) Enum.parse(typeof(Color),"Red",true)
6.IsDefined
//表示每个枚举的类型是否合法
public static IsDefined(Type enumType,int value);
public static IsDefined(Type enumType,string value);
标记枚举
规则:只有当枚举中定义的每一个值是 2 的幂或所定义值的组合时,该枚举才可以显示 FlagsAttribute 属性。
定义
[Flags,Serializable]
public enum WindowStyle
{
MINIMUM_BUTTON = 1,
MAXIMUM_BUTTON = 2,
CLOSE_BUTTON = 4,
//等价:ALL_BUTTON = MINIMUM_BUTTON | MAXIMUM_BUTTON | CLOSE_BUTTON
ALL_BUTTON = 7,
}
WindowStyle styles = WindowStyle.MINIMUM_BUTTON | WindowStyle.MAXIMUM_BUTTON;
//output"MINIMUM_BUTTON,MAXIMUM_BUTTON"
Console.WriteLine(styles.ToString());