1、定義枚舉
定義枚舉很簡單,直接使用enum關鍵字聲明即可,例如定義性別的枚舉,性別只有男和女
public enum Sex
{
女 = 0,//’0‘是’女‘對應的內部表示,也可以說是女的Value,’女‘是外部表示,也可以說是Name
男 = 1,
}
2.使用枚舉

3.通常我們在數據庫中,很多的一些狀態、類型、性別等等字段保存的是數字,但我們在開發時需要判斷這些狀態時,直接使用 if(UserInfo.Sex==0)這種方式來判斷,顯然不太好,如果狀態多時,自己都難分辨哪個數字代表什么狀態。並且代碼也不可觀,我們在寫代碼時應該盡量少寫硬代碼。如果使用枚舉定義,數據庫存儲的枚舉對應的值,而在寫代碼時使用枚舉的名稱,這樣一看代碼就知道數據庫儲值的是什么狀態。非常清楚明了。
4.UI層顯示枚舉的名稱。如果數據庫存儲的是枚舉的值(為數字),而在UI上當然不能已數字的方式顯示,應該顯示對應的枚舉名稱。例如在一個用戶信息列表中需要綁定用戶性別(枚舉為上述的Sex),那該如何顯示枚舉的名稱呢?一下提供多種方式
3.1:GridView控件綁定數據源為例,可以添加一列模板項,通過值獲取枚舉名稱

1 <asp:TemplateField HeaderText="性別">
2 <ItemTemplate>
3 <%#(枚舉所在命名空間.Sex)Convert.ToInt32(Eval("Sex"))%>
4 </ItemTemplate>
5</asp:TemplateField>
3.2: 通過Enum對象獲取名稱

1 <asp:TemplateField HeaderText="性別">
2 <ItemTemplate>
3 <%#Enum.GetName(typeof(枚舉所在命名空間.Sex), Convert.ToInt32(Eval("Sex")))%>
4 </ItemTemplate>
5 </asp:TemplateField>
還有很多方式來處理這個問題,大家可以自由選擇。
5.枚舉的‘高級用法’組合運用:例如一個界面里有:增、刪、查、改等操作,但對應不同用戶就有不同操作權限。例如A用戶只能增、刪,而B用戶只能查、改等等。如果在權限表中某一個字段類型指定用戶的操作權限時,問題就出來了。來看看一下3種解決方式:
1.每個操作權限一條數據,缺點:每次更改權限時,避免不了刪除和新增,並且數據量龐大,如果一個用戶有一千權限就代表有一千條數據,那這張表的數據就不敢想象了。
2.一個字段存儲所有的操作權限,每個操作權限使用 某個指定的符號作為分隔符,這種方式叫簡單、方便。
3.就是使用我們的枚舉組合,在一個字段存儲所有的操作權限,但值只為一個數,不像方式2使用分隔符分開。
當然,還有很多方式可以解決這種問題。我們現在就來看看如何使用枚舉組合來代表多個操作權限。
5.1:定義一個操作權限枚舉:
[Flags]//必須打上一個標記,打上這個標記系統才能識別這個枚舉可使用組合方式
public enum Role
{
未分配=0,
刪除數據 = 1,
修改數據 = 2,
新增數據 = 4,
查看數據 = 8,
}
5.2:如果用戶有刪除、修改的權限在枚舉定義中只有1和2的枚舉,那怎么將這兩個枚舉值組合成一個枚舉值存儲到數據庫呢?很簡單,看一下代碼:
int allRole = ((int)Role.刪除數據) + ((int)Role.修改數據);
//這時allRole的值為3 (兩個枚舉對應值相加:1+2=3),這時直接將allRole值存儲到數據就可以了
現在我們就來判斷用戶是否具有某個操作權限,先從數據庫中取出權限值,以上述,allRole則為數據庫中取出的值,為3,接下來我們通過位算符來判斷:

Role myAllRole = (Role)allRole;//將int值強制轉換為枚舉
//此時,myAllRole的名稱為 ‘ 刪除數據, 修改數據 ’ ,值為3
//判斷是否有刪除權限
if ((myAllRole & Role.刪除數據) == Role.刪除數據)
{
//有
}
注意此處使用了 位算符& 方式來獲取判斷,關於位算符的使用在此就不講了。組合運用大概就是這樣。必須注意的地方就是枚舉值的定義,我們可以看到Role枚舉的定義值的規律,0到1,1到2,2到4,4到8,8到16......當前的值為上個值的2次方,為什么要這樣定義呢?是因為任何的組合都可以在枚舉范圍中某幾個值的總和,例如組合值為15,那15就等於枚舉定義范圍里的定義值為1、2、4、8相加,15=1+2+4+8。只有按規律定義值,就可以組合成任意數。
組合必須注意的幾點:
1.枚舉定義時,必須打上[Flags]標記,系統才會根據這個標記來決定這個枚舉是否可組合使用
2.定義枚舉的值必須按以上所說的規律定義,例如:0、1、2、4、8、16、32.......也可以使用3次方的方式,例如:0、3、6、12、24..........
6.使用優點總結
1.規則性:例如數據庫某個字段的值只在1、2、3、4,例如狀態,當我們在錄入數據時,我們可以從枚舉中取值,這樣避免了這個字段出現其它值,同時也使代碼更容易理解,因為在取值時,我們是拿枚舉定義的名稱,名稱是我們自定義的易理解的中文或英文。
2.易解性:就是上述所說的,枚舉名稱是用中文和英文來定義,在使用時,則拿枚舉的名稱,這樣一看代碼就知道。而不會在代碼中寫1、2、3、4這樣的數字,也許過段時間自己寫的都忘了了1代表什么?2代表什么?了,更何況日后他人的維護呢。