C#裏面的枚舉與位或運算符 一個枚舉變量存入多個值

之前咱們若是定義一個枚舉類型 ,而後定義一個枚舉變量,那麼這個枚舉變量只能爲類型中的一個值,如今咱們想要一個變量可以表明多個值:測試

 

  

 

 

 

今天看《Pro Net 2.0 Windows Forms And Custom Cortrols In C#》時看到枚舉一節,發現了在一個枚舉裏面須要合併多個值,看到了用到了」|」運算符,原來沒怎麼注意,今天想了一下爲何用」|」呢?
MSDN裏面看到了這樣一句話:「用2的冪(即 一、二、四、8 等)定義枚舉常量。這意味着組合的枚舉常量中的各個標誌都不重疊。」
因而寫了一個例子:
spa

複製代碼

 [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);
 }code

複製代碼

輸出結果:


咦! 1 + 2 + 4 + 8 = 15 剛剛等於15,難道這是巧合?
所有顯示出來了,安逸!
orm

再寫個例子試試:
xml

複製代碼
 [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);
 }
複製代碼


輸出結果:
blog

暈,怎麼沒把顏色所有顯示出來呀?
咦!3 + 4 = 7 恰好顯示枚舉值爲3,4的兩種顏色
string

再寫一個例子呢?
it

複製代碼
 //測試
 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());
 }
複製代碼

輸出結果:
變量

竟然會自動轉換成相應的枚舉值,厲害!object

再來我加個枚舉爲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);

        }

相關文章
相關標籤/搜索