枚举是在写程序的过程中经常会遇到的类型。对于Enum,.Net提供了很多使用的方法:
1.Parse:将一个或多个枚举常数的名称或数字值的字符串表示转换成等效的枚举对象。 (MSDN)
Parse方法是经常会用到的一个方法,它有两个重载形式:
public static Object Parse( Type enumType, string value )
public static Object Parse( Type enumType, string value, bool ignoreCase )
2.GetNames和GetName
●GetNames:检索指定枚举中常数名称的数组。(MSDN)
方法原型:public static string[] GetNames(Type enumType)
●GetName :在指定枚举中检索具有指定值的常数的名称。(MSDN)
方法原型:public static string GetName(Type enumType, Object value)
3.GetValues
●GetValues:检索指定枚举中常数值的数组。(MSDN)
方法原型:public static Array GetValues( Type enumType )
注 :不存在GetValue方法。
4.IsDefined:返回指定枚举中是否存在具有指定值的常数的指示。(MSDN)
方法原型:public static bool IsDefined( Type enumType, Object value )
当在将一个值转化枚举的时候,如果遇到这个值并非枚举的一分子的时候,会怎么样呢?
- class Program
- {
- enum Test
- {
- Value1 =0,
- Value2 =1
- }
- static void Main(string[] args)
- {
- object o =Enum.Parse(typeof (Test), "2");
- Test t = (Test) o;
- Console.WriteLine(t);
- }
- }
上面的代码会正常运行,并不会抛出任何异常,因此当我们把这样一个值转换成枚举的时候可能会面临很多潜在的问题。不过IsDefined可以为我们解决这个问题,在转换时先用这个方法判断一下将解除我们的安全隐患。既然Parse方法可以接受一个值也可以接受一个 常数名称作为参数,那为什么IsDefined只有值做参数的形式呢?答案是如果传递一个非法的常数名称程序会抛出异常,而不会像上面的例子一样正常运行。
附加例子
1.枚举的概念
枚举的定义罗列出了所有可能的取值,枚举变量的值只能是罗列出的值之一,例如:
- public enum FormStatus
- {
- WaitApprove,Approved,Reject
- }
枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。也可以自己定义枚举的值:
- public enum FormStatus
- {
- WaitApprove = 100,
- Approved = 200,
- Reject = 300
- }
2.枚举的使用
- FormStatus fs = FormStatus.WaitApprove;
- //Enum 转 Int
- int fsValue = (int)fs;
- Console.WriteLine(fsValue);
- //int 转Enum
- fs = (FormStatus)1;
- Console.WriteLine(fs);
- //判断枚举值
- if(fs.Equals(FormStatus.Approved))
- {
- Console.WriteLine("该单据已经被签核!");
- }
- //遍历所有的值
- Type fsType = typeof(FormStatus);
- Console.WriteLine("The status of the Form, and their corresponding values are:");
- foreach (string s in Enum.GetNames(fsType) )
- Console.WriteLine( "{0,-11}= {1}", s, Enum.Format( fsType, Enum.Parse(fsType, s),"d"));
- Console.ReadLine();