以前我們如果定義一個枚舉類型 ,然后定義一個枚舉變量,那么這個枚舉變量只能為類型中的一個值,現在我們想要一個變量能夠代表多個值:
今天看《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,難道這是巧合?
全部顯示出來了,安逸!
再寫個例子試試:









| Colors_2.Yellow;




輸出結果:
暈,怎么沒把顏色全部顯示出來呀?
咦!3 + 4 = 7 剛好顯示枚舉值為3,4的兩種顏色
再寫一個例子呢?






輸出結果:
居然會自動轉換成相應的枚舉值,厲害!
再來我加個枚舉為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);
}