• C#里面的枚举与位或运算符 一个枚举变量存入多个值


    以前我们如果定义一个枚举类型 ,然后定义一个枚举变量,那么这个枚举变量只能为类型中的一个值,现在我们想要一个变量能够代表多个值:

      

    今天看《Pro Net 2.0 Windows Forms And Custom Cortrols In C#》时看到枚举一节,发现了在一个枚举里面需要合并多个值,看到了用到了”|”运算符,原来没怎么注意,今天想了一下为什么用”|”呢?
    MSDN里面看到了这样一句话:“用2的幂(即 1、2、4、8 等)定义枚举常量。这意味着组合的枚举常量中的各个标志都不重叠。”
    于是写了一个例子:

    复制代码

     [FlagsAttribute]  加上他枚举变量才能进行位或操作
     enum Colors_1
     {
     Red = 1, Green = 2, Blue = 4, Yellow = 8
     };
     //测试
     private void button1_Click(object sender, EventArgs e)
     {
     Colors_1 color_1 = Colors_1.Red | Colors_1.Green | Colors_1.Blue
    | Colors_1.Yellow;

     string strResult = color_1.ToString() + " " + ((int)color_1)
    .ToString();
     MessageBox.Show(strResult);
     }

    复制代码

    输出结果:


    咦! 1 + 2 + 4 + 8 = 15 刚刚等于15,难道这是巧合?
    全部显示出来了,安逸!

    再写个例子试试:

    复制代码
     [FlagsAttribute]
     enum Colors_2
     {
     Red = 1, Green = 2, Blue = 3, Yellow = 4
     };
     //测试
     private void button1_Click(object sender, EventArgs e)
     {
     Colors_2 color_2 = Colors_2.Red | Colors_2.Green | Colors_2.Blue
    | Colors_2.Yellow;

     string strResult = color_2.ToString() + " " + ((int)color_2).ToString();
     MessageBox.Show(strResult);
     }
    复制代码


    输出结果:

    晕,怎么没把颜色全部显示出来呀?
    咦!3 + 4 = 7 刚好显示枚举值为3,4的两种颜色

    再写一个例子呢?

    复制代码
     //测试
     private void button1_Click(object sender, EventArgs e)
     {
     Colors_1 c = (Colors_1)Enum.Parse(typeof(Colors_1), "7");
     MessageBox.Show(c.ToString() + " " + ((int)c).ToString());
     }
    复制代码

    输出结果:

    居然会自动转换成相应的枚举值,厉害!

    再来我加个枚举为7的值:

    复制代码
     [FlagsAttribute]
     enum Colors_1
     {
     Red = 1, Green = 2, Blue = 4, Yellow = 8, Seven = 7
     };
     //测试
     private void button1_Click(object sender, EventArgs e)
     {
     Colors_1 c = (Colors_1)Enum.Parse(typeof(Colors_1), "7");
     MessageBox.Show(c.ToString() + " " + ((int)c).ToString());
     }
    复制代码


    输出结果:

    印证了MSDN那句话,只有将枚举值设置为0,2,4,8…..这样的只才会叠加,枚举会自动判断当前值,如果枚举里面有这个值当然就显示这个值了;如果没有就做匹配用加法看看那几个数加起来刚好是这个枚举值,但如果有几个数字加起来都等于这个值怎么办呢?还没遇到呢,目前这是我的理解,希望大牛些指教!

    运用:::::

        [Flags]  //注意标志
        public enum myColor
        {
         None=0,  Red=1,Green=2,Blue=4,Yellow=8
        };

            private void Form1_MouseClick(object sender, MouseEventArgs e)
            {

                 myColor my=myColor.None;
               //添加

                 if(红色)

                 my=my|myColor.Red;

                if(绿色)

                    my=my|myColor.Red;

                ........

               //提取

                if(my&myColor.None=myColor.None)?ture:false;

                 if(my&myColor.None=myColor.Red)?ture:false;

                  

                string nnn = mmm.ToString();

                MessageBox.Show(nnn);

            }

  • 相关阅读:
    流体布局、响应式布局
    CSS
    表格的合并
    HTML
    http请求与响应
    MySQL存储引擎
    MySQL之索引以及正确使用索引
    MySQL之视图、触发器、存储过程、函数、事务、数据库锁
    MySQL之正则表达式
    MySQL练习题
  • 原文地址:https://www.cnblogs.com/ChineseMoonGod/p/5312993.html
Copyright © 2020-2023  润新知