枚举的含义及其应用

转:http://www.cnblogs.com/tonney/archive/2011/04/29/2032434.html

 

本章讲解如下枚举的如下几个知识点:

   1、什么是枚举?

   2、枚举是值类型还是引用类型?

   3、如何定义枚举?

   4、枚举的好处?

   5、枚举在实际系统开发过程中的用处?

 

   一、什么是枚举

           枚举:用来存放一组固定的常量

                  是用来解决用户进行多次if /switch重复简单的判断

  

  二、枚举是值类型还是引用类型?

      枚举是值类型

 

  三、如何定义枚举?

      定义枚举的语法非常简单,如下:

      

枚举的语法
复制代码
  public   enum  枚举名
 {
     
 }
 
 枚举的定义1,如下:
 public enum ColorEnum
 {
     红色,          //注意,系统会默认给它赋值为0
     蓝色,          //系统赋值为1
     黑色,          //系统赋值为2
     粉红色         //系统赋值为3
 }
 
 枚举的定义方式2,如下:  
 public enum ColorEnum
 {
     红色=2,          //用户自己赋值 所以枚举是一组 符号名称/值 配对
     蓝色,            // 系统赋值为3        
     黑色=2,            //用户自己赋值2
     粉红色             //系统赋值为3
 }
  所以可以看出,系统会自己给没有赋值的常量赋值,
              但赋值的方式是按照上一个的值+1来进行操作的
 
1、  如下枚举的结果正确的是(  )
  public enum MyColor
  {
      红色=1,
      蓝色=2,
      黑色=1,
      白色
  }
  程序输出: Console.WriteLine(  (int)MyColor.白色   );
 
  A、1      B、2      C、3      D、程序编译错误
 
 
2、  如下枚举的结果正确的是(  )
  public enum MyColor
  {
      红色=1,
      蓝色=2,
      红色=3,
      白色
  }
  程序输出: Console.WriteLine(  (int)MyColor.红色   );
 
  A、1      B、2      C、3      D、程序编译错误
 
   提示:枚举中等号左边的值不能重复.
 
复制代码

    要记得枚举的关键字是 enum

 

  四、枚举的好处?

    1、便于用户回忆以前的资料

    2、便于少输入代码,使程序更容易编写和维护。

    3、防止用户乱输入

 

 五、枚举在实际系统开发过程中的用处?

    我举一个仿QQ换肤的简单方法来做一个试验,代码如下,请分析结果会是什么?

    

   我们来看一看,这样的代码确实有点不能让人接受,原因:

      1、结果错误,通过客户端传入一个字符串来进行判断,容易出错

      2、使用了多个if.. else if ..else if....语句块,

          基本上是在做同一件判断的事情

      3、如果这个程序拿给一个新手来做,那这个新员工来进行开发,那这个员工的记忆力要非常的好,

         不然一个字符输出就有可能得不到想要的结果.....

 

   那如何解决这种多次使用if/switch等简单语句判断呢?这时候枚举就出马了,代码如下:

 

 

在用户调用的时候,系统会有提示,如图:

 

使用枚举的好处,再次强调:

    1、便于用户回忆以前的资料

    2、便于少输入代码,使程序更容易编写和维护。

    3、防止用户乱输入

 

那如何把字符串转换为枚举类型?

如何把枚举添加到下拉菜单中?

这两个问题,在下一章将会进行讲解.

/

枚举的一些常用操作

本章将介绍以下几点   

   1、如何把其它类型转换为枚举类型?

   2、如何把枚举中的值添加到下拉菜单中?

 

一、如何把其它类型转换为枚举类型?

       我们回顾一下有关字符串与数字之间的转换,如:

       string strValue="12";

       int value=int.Parse(strValue);    //使用int.Parse()就可以把字符串转换为整数

    

      那把字符串转换成枚举类型相对于要复一些,语法如下:

      Enum.Parse(枚举的类型,要转换的值);

      实际应用:

      现在有一个枚举

 现有一个字符串:string strValue="QQ2001";

使用枚举转换语句:Enum.Parse(枚举的类型,要转换的值);

  Enum.Parse(typeof(QQSkipEnum) , strValue);

  以上的结果是一个object类型,所以还需要强转一下,

 

  使用该枚举来接收,如下:

QQSkipEnum  qprase=

(QQSkipEnum)Enum.Parse(typeof(QQSkipEnum) , strValue);

这样就把字符串转换成枚举类型成功,以上的代码相对于复杂一点,

但在实际的开发过程当中,是必不可少的,所以务必要记住

 

 注意:在把字符串转换为枚举过程中,该字符串必须在枚举中是存在此值的,如果该值不存在,

         系统就会提示错误

 

 如:

string strValue="qq2001";       

转换的时候:

QQSkipEnum  qprase=

(QQSkipEnum)Enum.Parse(typeof(QQSkipEnum) , strValue);

这样是不行的,因为在枚举中没有 "qq2001"的定义,只有大写的“QQ2001”

 

二、如何把枚举中的值添加到下拉菜单中

    因为枚举是一组固定的常量,所以可以使用枚举中的自带方法,把这些常量转换为字符串数组,

  然后再添加到下拉菜单中。

   语法如下:

   string[]   qqSkip= Enum.GetNames(枚举类型);    //该方法返回的是字符串数组

  

  以下是效果图:

  

 

  如果还不太明白,可以去MSDN:

  http://msdn.microsoft.com/zh-cn/library/sbbt4032(VS.80).aspx

 

  以下是Enum成员,请大家了解一下:

  http://msdn.microsoft.com/zh-cn/library/system.enum_members(VS.80).aspx

 

  总结:枚举在我们实际项目开发中,非常的重要,枚举转换和如何得到枚举的值,

          这些方法大家必须要记下来,学程序的最好的方法就是,练,练,练,再练。

           祝大家学习快乐!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/** 1. 功能:枚举操作类,枚举类型创建,转换 * 2. 作者:杨磊 * 3. 创建日期:2008-1-30 * 4. 最后修改日期:2008-11-10 **/ using System; using System.Collections.Generic; using System.Text; using System.Collections; /// /// 枚举操作类,枚举类型创建,转换 /// public class EnumHelper { #region 通过字符串获取枚举成员实例 /// /// 通过字符串获取枚举成员实例 /// /// 枚举名,比如Enum1 /// 枚举成员的常量名或常量值, /// 范例:Enum1枚举有两个成员A=0,B=1,则传入"A"或"0"获取 Enum1.A 枚举类型 public static T GetInstance(string member) { return CommFun.ConvertTo(Enum.Parse(typeof(T), member, true)); } #endregion #region 获取枚举成员名称和成员值的键值对集合 /// /// 获取枚举成员名称和成员值的键值对集合 /// /// 枚举名,比如Enum1 public static Hashtable GetMemberKeyValue() { //创建哈希表 Hashtable ht = new Hashtable(); //获取枚举所有成员名称 string[] memberNames = GetMemberNames(); //遍历枚举成员 foreach (string memberName in memberNames) { ht.Add(memberName, GetMemberValue(memberName)); } //返回哈希表 return ht; } #endregion #region 获取枚举所有成员名称 /// /// 获取枚举所有成员名称 /// /// 枚举名,比如Enum1 public static string[] GetMemberNames() { return Enum.GetNames(typeof(T)); } #endregion #region 获取枚举成员的名称 /// /// 获取枚举成员的名称 /// /// 枚举名,比如Enum1 /// 枚举成员实例或成员值, /// 范例:Enum1枚举有两个成员A=0,B=1,则传入Enum1.A或0,获取成员名称"A" public static string GetMemberName(object member) { //转成基础类型的成员值 Type underlyingType = GetUnderlyingType(typeof(T)); object memberValue = CommFun.ConvertTo(member,underlyingType); //获取枚举成员的名称 return Enum.GetName(typeof(T), memberValue); } #endregion #re

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值