c# 枚舉基礎 與 枚舉屬性的訪問

來源:互聯網
上載者:User
枚舉提供成組的常數值,它們有助於使成員成為強型別以及提高代碼的可讀性。在 C# 中,使用 enum 來聲明枚舉。

 

枚舉分為簡單枚舉標誌枚舉兩種。

基本文法樣本

enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

以下格式也可以:

enum Day
{
    Sun,
    Mon,
    Tue,
    Wed,
    Thu,
    Fri,
    Sat
};

枚舉類型

枚舉類型可以是:byte、sbyte、short、ushort、int、uint、long、ulong,如果沒有指定類型,則預設為 int 類型。指定類型樣本:

enum Day : byte { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

枚舉數的值

預設情況下,第一個枚舉數的值為 0,後面每個枚舉數的值在前一個枚舉數的值基礎上遞增 1。當然,也可以自行指定,例如:

enum Day { Sun = 1, Mon, Tue, Wed, Thu, Fri, Sat };
enum Range { MIN = 0, MAX = 255 };
enum Range2 { MIN, M1 = 50, M2, MAX = 255 }; //MIN 為 0,M2 為 51

枚舉數大小寫敏感

比如以下枚舉有兩個枚舉數:

enum EnumTest { Sun, sun }; //儘管如此,我們仍不推薦這樣寫

取枚舉數的值

雖然枚舉有類型,但取枚舉數的值時,仍然需要進行類型轉換。

public partial class _ENUM : System.Web.UI.Page
{
    enum Range { MIN = 0, MAX = 255 };
   
   
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(Range.MAX); //輸出為:MAX
        Response.Write("<br>");
        Response.Write(((int)Range.MAX).ToString()); //輸出為:255
    }
}

枚舉不能放在函數中

枚舉可以與類平級,也可以作為類的 field,但不能放在函數中。可以加 public 等修飾符。

 

 

 

以下是使用枚舉時幾條好的建議。

優先考慮使用枚舉,而不是類的靜態常量

比如:

public static class Day
{
    public static int Sun = 1;
    public static int Mon = 2;
    public static int Tue = 3;
    //...
}

應該使用如下的枚舉:

enum Day { Sun = 1, Mon, Tue, Wed, Thu, Fri, Sat };

如果參數、傳回值、變數等類型可以是枚舉,則不要使用其它基礎類型

比如:

Range r = Range.MAX; //好
int r = (int)Range.MAX; //不好

枚舉命名

枚舉一般使用名詞或名片語合,簡單枚舉使用單數,標誌枚舉使用複數。

大多數情況下不需要更改枚舉的預設類型

也就是說大多數情況下,使用 int(System.Int32)作為枚舉類型。除非:

  • 枚舉是標誌枚舉,且標誌多於 32 個(此時 int 類型裝不下)。
  • 枚舉被非常大量且頻繁地使用,為了節約空間使用小於 int 的類型。
  • 不得不使用其它類型的情況。

不要在枚舉中設定哨兵

我們可能覺得在枚舉的兩端加上哨兵,這樣在判斷一個數是否在枚舉中時,只需要判斷是否在哨兵之中。非常不幸,我們不應該這麼做,這破壞了枚舉的意義。

enum Day {FirstValue, Sun, Mon, Tue, Wed, Thu, Fri, Sat, LastValue }; //FirstValue、LastValue 應該去掉

 

  • 簡單枚舉包含的值不用於組合,也不用於位元壓縮。
  • 標誌枚舉應使用按位 OR 操作進行組合。

簡單枚舉

前面提到的 Day、Range 都可以稱之為簡單枚舉,因為不能將他們各自的值組合起來。

標誌枚舉

標誌枚舉的設計有兩點要注意。

  • 指明 FlagsAttribute,以指示可以將枚舉作為位域(即一組標誌)處理。
  • 枚舉中各標誌的值應該是以 2 的冪來賦值,即:1、2、4、8、16、32……

舉個例子,假如我們在設計 Windows 視窗程序,視窗有最小化、最大化、關閉按鈕,我們想任意組合顯示,也就是說我們可以顯示其中的任意 0 個或一個或多個按鈕。

如果使用簡單枚舉,按照排列組合,我們要使用 1 + 3 + 3 + 1 = 8 個枚舉數,如果這裡不是三個按鈕,而是四個按鈕,枚舉數就更多了。所以這樣不現實。

為什麼這裡使用簡單枚舉不現實呢?因為簡單枚舉不能組合,採用標誌枚舉就可以輕鬆解決了。

[Flags]
public enum WindowStyle
{
    MINIMUM_BUTTON = 1, //十六進位表示為 0x0001
    MAXIMUM_BUTTON = 2,
    CLOSE_BUTTON = 4
}

我們在設定視窗樣式時,利用 OR 自由組合:

WindowStyle ws = WindowStyle.MINIMUM_BUTTON | WindowStyle.CLOSE_BUTTON; //表示既有 MINIMUM_BUTTON 也有 CLOSE_BUTTON

這就是為什麼標誌的值要按 2 的冪排列的原因了,也是為什麼標誌多於 32 個時不能使用 int 類型的原因了。

通常我們為常用的標誌組合提供特殊的枚舉值

仍然以上述視窗為例,可知大多數情況下,我們均要顯示這三個按鈕,所以每次使用時都要用:

WindowStyle ws = WindowStyle.MINIMUM_BUTTON | MAXIMUM_BUTTON | WindowStyle.CLOSE_BUTTON;

實在有些繁瑣,我們可以修改枚舉為如下:

[Flags]
public enum WindowStyle
{
    MINIMUM_BUTTON = 1,
    MAXIMUM_BUTTON = 2,
    CLOSE_BUTTON = 4,
    ALL_BUTTON = 7
}

增加一個 ALL_BUTTON 為前三個標誌的值。使用時直接用 ALL_BUTTON 就可以了。

 

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;

namespace test
{
    public enum Style:int  
    {
        lenovo=1,
        acer=2,
        dell=3
    }
   

   public class PublicBLL
    {
       private int _itemtype;

       public static int ItemType
       {
           get
           {
               return _itemtype;
           }
           set { _itemtype = value; }
       }
   }
}

PublicBLL.ItemType返回的就是int型的1 or 2 or 3。

如若判斷其值是否等於一個枚舉
if (PublicBll.ItemType==(int)Style.lenovo)
{
//程式碼片段
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.