关于枚举的一两件私房事



一提起枚举,我想各位是熟悉得无法形容的了。枚举有啥用?枚举就是用来对一系列可选值进行规范。

举个例子说,

定义一个关于厕所的枚举,通常我们见到的厕所有男厕,女厕,或者狗厕。是吧,估计你走在大街上很少看到有龟厕的吧。因此,为了让使用我们代码的人能有一个规范供他参考,于是我们会把男厕、女厕和狗厕三种可选项定义在一个枚举类型“厕所”中。

再比如,我们在开发一个下象棋的应用程序时,在开始时对阵双方要选一方模子,而我们有效的选项是红方或黑方(有的是红方和绿方),为了防止有的玩家选到了白方,蓝方之类不符合规范的颜色,我们就可以定义一个枚举来限定之。


先说枚举的第一件私事——Enum.GetNames方法。

这个方法可以把指定枚举的所有成员的名字返回到一个字符串数组中。比如我们有一个枚举:

enum  rencai {  白痴,   奇才,   鬼才  };

于是执行Enum.GetNames( typeof( rencai ) ) 后会返回一个字符串数组,这个字符串数组就包含:白痴,奇才,鬼才三个元素。

这个方法对于用来把枚举的成员绑定到一个列表框,或者一个下拉列表框时比较实用


枚举的第二件私房事——Parse或TryParse

这个和int.Parse差不多,可以把表示枚举成员的名称的字符串转化为指定枚举类型的对应的值。

如上面的人才枚举,如果把 “白痴”传给Parse方法,这样就可以返回一个表示白痴的枚举值。


简单示例

下面我举一个人类历史上最简单的例子。

这是一个WinForm程序,我定义了一个表示性别的枚举,它包含三个值,表示三种性别:

  1. enum Gender  
  2. {  
  3.     男,  
  4.     女,  
  5.     人妖  
  6. }  
    enum Gender
    {
        男,
        女,
        人妖
    }

然后,在程序运行时,用GetNames方法把Gender枚举的所有成员的名字取出来,绑定到ComboBox中,这样下拉列表中就限定了这三个选项了。

  1. // 将可用的效值枚举值放到ComboBox中  
  2. var items = Enum.GetNames(typeof(Gender));  
  3. this.comboBox1.DataSource = items;  
            // 将可用的效值枚举值放到ComboBox中
            var items = Enum.GetNames(typeof(Gender));
            this.comboBox1.DataSource = items;

然后在单击按钮后,用Parse方法从ComboBox选择项的字符串中转换成Gender的指定的值了。

  1. private void button1_Click(object sender, EventArgs e)  
  2. {  
  3.     if (this.comboBox1.SelectedIndex == -1)  
  4.     {  
  5.         return;  
  6.     }  
  7.     string enumItem = this.comboBox1.SelectedItem as string;  
  8.     if (!string.IsNullOrEmpty(enumItem))  
  9.     {  
  10.         Gender gd = (Gender)Enum.Parse(typeof(Gender), enumItem);  
  11.         switch (gd)  
  12.         {  
  13.             case Gender.男:  
  14.                 this.textBox1.Text = "您是一位帅哥。";  
  15.                 break;  
  16.             case Gender.女:  
  17.                 this.textBox1.Text = "你是一位美女。";  
  18.                 break;  
  19.             case Gender.人妖:  
  20.                 this.textBox1.Text = "发现未知物种。";  
  21.                 break;  
  22.             default:  
  23.                 break;  
  24.         }  
  25.     }  
  26. }  
        private void button1_Click(object sender, EventArgs e)
        {
            if (this.comboBox1.SelectedIndex == -1)
            {
                return;
            }
            string enumItem = this.comboBox1.SelectedItem as string;
            if (!string.IsNullOrEmpty(enumItem))
            {
                Gender gd = (Gender)Enum.Parse(typeof(Gender), enumItem);
                switch (gd)
                {
                    case Gender.男:
                        this.textBox1.Text = "您是一位帅哥。";
                        break;
                    case Gender.女:
                        this.textBox1.Text = "你是一位美女。";
                        break;
                    case Gender.人妖:
                        this.textBox1.Text = "发现未知物种。";
                        break;
                    default:
                        break;
                }
            }
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值