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

Posted ChineseMoonGod

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

        }

 

以上是关于C#里面的枚举与位或运算符 一个枚举变量存入多个值的主要内容,如果未能解决你的问题,请参考以下文章

Swift学习之位移枚举的按位或运算

枚举与位枚举

C ++枚举标志与位集

C#中,定义了一个枚举,怎么用for循环来遍历枚举中的每个值?

如何在 C# 中为枚举重载运算符?

位移枚举