C# Enum (注意Enum.Parse方法)

转自:http://fhuan123.iteye.com/blog/841381



C#点点滴滴—Enum

枚举是在写程序的过程中经常会遇到的类型。对于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 )

        当在将一个值转化枚举的时候,如果遇到这个值并非枚举的一分子的时候,会怎么样呢?

C#代码   收藏代码
  1. class Program  
  2.    {  
  3.         enum Test  
  4.        {  
  5.             Value1 =0,  
  6.            Value2 =1  
  7.        }  
  8.    
  9.         static void Main(string[] args)  
  10.        {  
  11.             object o =Enum.Parse(typeof (Test), "2");  
  12.    
  13.            Test t = (Test) o;  
  14.    
  15.            Console.WriteLine(t);  
  16.        }  
  17.     }  

 

上面的代码会正常运行,并不会抛出任何异常,因此当我们把这样一个值转换成枚举的时候可能会面临很多潜在的问题。不过IsDefined可以为我们解决这个问题,在转换时先用这个方法判断一下将解除我们的安全隐患。既然Parse方法可以接受一个值也可以接受一个 常数名称作为参数,那为什么IsDefined只有值做参数的形式呢?答案是如果传递一个非法的常数名称程序会抛出异常,而不会像上面的例子一样正常运行。

 

附加例子

1.枚举的概念

      枚举的定义罗列出了所有可能的取值,枚举变量的值只能是罗列出的值之一,例如:

C#代码   收藏代码
  1. public enum FormStatus  
  2.  {  
  3.     WaitApprove,Approved,Reject  
  4.  }  

 

枚举元素的默认基础类型为 int。默认情况下,第一个枚举数的值为 0,后面每个枚举数的值依次递增 1。也可以自己定义枚举的值:

C#代码   收藏代码
  1. public enum FormStatus  
  2.  {  
  3.     WaitApprove = 100,  
  4.     Approved = 200,  
  5.     Reject = 300  
  6.  }  

 

2.枚举的使用

C#代码   收藏代码
  1. FormStatus fs = FormStatus.WaitApprove;  
  2.   
  3. //Enum 转 Int  
  4. int fsValue = (int)fs;  
  5. Console.WriteLine(fsValue);  
  6.   
  7. //int 转Enum  
  8. fs = (FormStatus)1;  
  9. Console.WriteLine(fs);  
  10.   
  11. //判断枚举值  
  12. if(fs.Equals(FormStatus.Approved))  
  13. {  
  14.     Console.WriteLine("该单据已经被签核!");  
  15. }  
  16.      
  17. //遍历所有的值  
  18. Type fsType = typeof(FormStatus);  
  19. Console.WriteLine("The status of the Form, and their corresponding values are:");  
  20. foreach (string s in Enum.GetNames(fsType) )  
  21.    Console.WriteLine( "{0,-11}= {1}", s, Enum.Format( fsType, Enum.Parse(fsType, s),"d"));  
  22.    Console.ReadLine(); 
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值