天天看點

C#中Enum用法小結

enums枚舉是值類型,資料直接存儲在棧中,而不是使用引用和真實資料的隔離方式來存儲。

(1)預設情況下,枚舉中的第一個變量被指派為0,其他的變量的值按定義的順序來遞增(0,12,3...),是以以下兩個代碼定義是等價的:

enum TrafficLight

{  
 Green,  
 Yellow,  
 Red  
}              

複制

enum TrafficLight  
{  
 Green = 0,  
 Yellow = 1,  
Red = 2  
}             

複制

(2)enum枚舉類型的變量的名字不能相同,但是值可以相同,例如:

enum TrafficLight

{  
Green = 0,  
Yellow = 1,     // Duplicate value, OK   
Red = 1         // Duplicate value, OK   
}           

複制

(3)如果enum中的部分成員顯式定義了值,而部分沒有;那麼沒有定義值的成員還是會按照上一個成員的值來遞增指派,例如:

enum LoopType  
{  
  None,          // value is 0    
 Daily,         // value is 1    
 Weekly = 7,  
 Monthly,       // value is 8    
Yeayly,        // value is 9    
  DayGap = 15,           
  WeekGap,       // value is 16    
 MonthGap,      // value is 17    
YearGap        // value is 18    
}           

複制

(4)enum枚舉成員可以用來作為位标志,同時支援位的操作(位與,位或等等),例如:

enum CardDeckSettings : uint  
{  
 SingleDeck = 0x01,      // Bit 0  
 LargePictures = 0x02,   // Bit 1  
FancyNumbers = 0x04,    // Bit 2  
Animation = 0x08        // Bit 3      
}           

複制

十六進制數的一個作用就是用來進行位運算和操作,很友善。

1. 枚舉(enum type)通常用來表示一組常量。由于枚舉是強類型的,這在程式設計中給我們提供了極大的友善。

2. 枚舉的定義:

public enum Sex
        {
            男 = 0,
            女 = 1
        }           

複制

或者:如果隻給男指派,那麼女=1

public enum Sex
        {
            男 = 0,
            女
        }           

複制

枚舉的優點:

<1>枚舉可以使代碼更易于維護,有助于確定給變量指定合法的、期望的值。

<2>枚舉使代碼更清晰,允許用描述性的名稱表示整數值,而不是用含義模糊的數來表示。

<3>枚舉使代碼更易于鍵入。在給枚舉類型的執行個體指派時,VS.NET IDE會通過IntelliSense彈出一個包含可接受值的清單框,減少了按鍵次數,并能夠讓我們回憶起可能的值

枚舉在軟體開發中的使用場景

在資料庫設計人員表(person)時有性别字段Sex(0代表男,1代表女),我們一般用bit或者int類型表示。

1.在程式設計時我們給Sex字段指派的方式為:

1). Sex=0;

2). Sex=(int)SexEnum.Man;

其中SexEnum為定義性别的枚舉類型,我們可以看出第二種方式的可讀性更強。

2.在程式設計時我們,如果Sex字段作為一個搜尋條件的話,我們可能需要以下拉選擇的方式展現所有可以選擇的情況。那麼我們就需要将SexEnum轉換成一個字典集合然後綁定到對應的select标簽,具體怎麼實作請看下面的示例代碼。

………………………………

enum、int、string三種類型之間的互轉

C#中Enum用法小結

執行結果如下:

C#中Enum用法小結
枚舉執行個體

  聲明:



public enum TimeOfDay
{
    Moning = 0,
    Afternoon = 1,
    Evening = 2,
};


  使用:



    public string getTimeOfDay(TimeOfDay time)
    {
        string result = string.Empty;
        switch (time)
        {
            case TimeOfDay.Moning:
                result = "上午";
                break;
            case TimeOfDay.Afternoon:
                result = "下午";
                break;
            case TimeOfDay.Evening:
                result = "晚上";
                break;
            default:
                result = "未知";
                break;
        }
        return result;
    }
           

複制

枚舉方法

<1>擷取枚舉字元串

TimeOfDay time = TimeOfDay.Afternoon;

Console.WriteLine(time.ToString());//輸出:Afternoon

<2>Enum.Parse()方法。這個方法帶3個參數,第一個參數是要使用的枚舉類型。其文法是關鍵字typeof後跟放在括号中的枚舉類名。typeof運算符将在第5章詳細論述。第二個參數是要轉換的字元串,第三個參數是一個bool,指定在進行轉換時是否忽略大小寫。最後,注意Enum.Parse()方法實際上傳回一個對象引用—— 我們需要把這個字元串顯式轉換為需要的枚舉類型(這是一個取消裝箱操作的例子)。對于上面的代碼,将傳回1,作為一個對象,對應于TimeOfDay.Afternoon的枚舉值。在顯式轉換為int時,會再次生成1。

TimeOfDay time2 = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), "afternoon", true);

Console.WriteLine((int)time2);//輸出1

<3>得到枚舉的某一值對應的名稱

lbOne.Text = Enum.GetName(typeof(TimeOfDay), 0);

<4>得到枚舉的所有的值

foreach (int i in Enum.GetValues(typeof(TimeOfDay)))

lbValues.Text += i.ToString();

<5>枚舉所有的名稱

foreach(string temp in Enum.GetNames(typeof(TimeOfDay)))

lbNames.Text+=temp;