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);

        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM