之前咱們若是定義一個枚舉類型 ,而後定義一個枚舉變量,那麼這個枚舉變量只能爲類型中的一個值,如今咱們想要一個變量可以表明多個值:測試
今天看《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
輸出結果:blog
暈,怎麼沒把顏色所有顯示出來呀?
咦!3 + 4 = 7 恰好顯示枚舉值爲3,4的兩種顏色string
再寫一個例子呢?
it
輸出結果:變量
竟然會自動轉換成相應的枚舉值,厲害!object
再來我加個枚舉爲7的值:
輸出結果:
印證了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);
}