C#點點滴滴:枚舉enum

1、enum簡介

  • enum爲枚舉類型,即一種由一組稱爲枚舉數列表的命名常量組成的獨特類型
  • 在聲明一個枚舉時,要指定該枚舉能夠包含的一組可接受的實例值,還能夠給值指定易於記憶的名稱

注:若是在代碼中試圖把一個不在可接受值範圍內的值賦予枚舉的一個實例,編譯器就會報告一個錯誤性能

2、enum類型

枚舉類型能夠是:byte、sbyte、shout、ushort、int、uint、long、ulong,默認值爲int類型ui

訪問修辭符 enum 枚舉名:基礎類型
{
        枚舉成員
}  (這裏C#不須要加分號)this

3、enum的值

聲明:spa

1 public enum TimeOfDay
2 {
3     Morning = 0,
4     Afternoon = 1,
5     Evening = 2,
6 };

若是不爲枚舉數列表中的元素指定值,則它們的值將以 1 爲增量自動遞增。在前面的示例中,Days.Morning的值爲 0,Days.Afternoon的值爲 1,依此類推。code

住:容許多個枚舉成員有相同的值,容許無順序地定義成員值,沒有顯式賦值的成員的值默認爲上一個成員的值+1(第一個成員若是沒賦值的話默認就是0)。另外,枚舉值都不能超過它的基礎類型範圍。對象

1 public enum TimeOfDay
2 {
3     Morning = 0,
4     Afternoon = 2,
5     Evening,    // == 3
6 };

使用:blog

 1 public string getTimeOfDay(TimeOfDay time)
 2     {
 3         string result = string.Empty;
 4         switch (time)
 5         {
 6             case TimeOfDay.Morning:
 7                 result = "上午";
 8                 break;
 9             case TimeOfDay.Afternoon:
10                 result = "下午";
11                 break;
12             case TimeOfDay.Evening:
13                 result = "晚上";
14                 break;
15             default:
16                 result = "未知";
17                 break;
18         }
19         return result;
20     }

 

 4、enum枚舉的經常使用方法

a. 獲取enum枚舉字符串字符串

1 TimeOfDay time = TimeOfDay.Afternoon;
2 
3 Console.WriteLine(time.ToString());//輸出:Afternoon

b. 獲取enum枚舉字符串對應的值get

1 TimeOfDay time2 = (TimeOfDay) Enum.Parse(typeof(TimeOfDay), "afternoon", true);
2 
3 Console.WriteLine((int)time2);//輸出1

Enum.Parse()這個方法帶3個參數,原型以下:原型

 1 // 參數
 2 // enumType
 3 // 枚舉的 Type。
 4 // value
 5 // 包含要轉換的值或名稱的字符串。
 6 // ignoreCase
 7 // 若是爲 true,則忽略大小寫;不然考慮大小寫。
 8 // 返回值
 9 // enumType 類型的對象,其值由 value 表示。
10 public static Object Parse (
11     Type enumType,
12     string value,
13     bool ignoreCase
14 )

 最後,注意Enum.Parse()方法實際上返回一個對象引用—— 咱們須要把這個字符串顯式轉換爲須要的枚舉類型(這是一個取消裝箱操做的例子)。對於上面的代碼,將返回1,做爲一個對象,對應於TimeOfDay.Afternoon的枚舉值。在顯式轉換爲int時,會再次生成1。

c. 獲取enum某個值對於的字符串

1 lbOne.Text = Enum.GetName(typeof(TimeOfDay), 0);
2 lbOne.Text = ((TimeOfDay)0).ToString();//返回:Morning

若有有兩個字符串的值是同樣的,則返回的是第一個匹配值的字符串。

上述兩種方法都能實現,可是當其值越界(不是枚舉所列出的值),就有必定的區別了。你們能夠根據本身的需求不一樣,選擇合適的方法。

1 lbCon.Text = ((TimeOfDay)5).ToString(); //返回:5,若是越界返回原值
2 this.lbGetName.Text = Enum.GetName(typeof(TimeOfDay), 5); //返回:空字符串,若是越界返回空字符串

d.獲得enum枚舉的全部的值 

1 foreach (int i in Enum.GetValues(typeof(TimeOfDay)))
2 {
3      lbValues.Text += i.ToString();
4 }

d.獲得enum枚舉的全部值對應的字符串

1 foreach(string temp in Enum.GetNames(typeof(TimeOfDay)))
2 {
3       lbNames.Text += temp;
4 }

 

5、 其餘

在C#中,枚舉的真正強大之處是它們在後臺會實例化爲派生於基類System.Enum的結構。這表示能夠對它們調用方法,執行有用的任務。注意由於.NET Framework的執行方式,在語法上把枚舉當作結構是不會有性能損失的。實際上,一旦代碼編譯好,枚舉就成爲基本類型,與int和float相似。

 

OK!

天天努力一點點,加油!

------------------------------------------------------------------------------------------

做者:龐輝

出處:http://www.cnblogs.com/pang123hui/

本文基於署名 2.5 中國大陸許可協議發佈,歡迎轉載,演繹或用於商業目的,可是必須保留本文的署名龐輝(包含連接).

相關文章
相關標籤/搜索