C#高階程式設計第六天----列舉
列舉
定義列舉用到的關鍵字:enum
public enum TimeOfDay
{
Monring = 0,
Afternoon = 1,
Evening = 2
}
static void Main(string[] args)
{
int x=(int)TimeOfDay.Afternoon;
Console.WriteLine(x);
Console.ReadKey();
}
建立列舉的優點:
1.是程式碼易於維護,因為確保給變數指定合法的,期望的值.
2.程式碼清晰,允許用描述性的名稱拜師整數值,而不是含義模糊,變化多端的數來表示.
3.易於鍵入(通過使用.符號)
本例中TimeOfDay.Afternoon返回數字1.使用美劇一般和合適的值傳遞給方法,並在switch語句中迭代可能的值.
public enum TimeOfDay
{
Monring = 0,
Afternoon = 1,
Evening = 2
}
static void Main(string[] args)
{
WriteGreeting(TimeOfDay.Afternoon);
Console.ReadKey();
}
static void WriteGreeting(TimeOfDay timeOfDay)
{
switch (timeOfDay)
{
case TimeOfDay.Monring:
Console.WriteLine("good monring");
break;
case TimeOfDay.Afternoon:
Console.WriteLine("cood afternoon");
break;
case TimeOfDay.Evening:
Console.WriteLine("good evening");
break;
default:
break;
}
}
在C#中列舉的真正強大之處使他們在後臺會例項化為派生於基類的System.Enum的結構.這表示可以對他們呼叫方法,執行有用的任務.一旦程式碼編譯好,美劇就成為了進本型別,與int和float類似.
使用前面的例子獲取美劇的字串表示.
TimeOfDay time = TimeOfDay.Afternoon;
Console.WriteLine(time.ToString());
字串型別轉換為列舉型別
TimeOfDay time2 = (TimeOfDay)Enum.Parse(typeof(TimeOfDay), "afternoon", true);
Console.WriteLine((int)time2);
從字串型別轉化為列舉型別需要用到函式Enum.Parse(),這個方法需要三個引數,第一個是要轉換的列舉累心,用關鍵字typeof包起來,第二個是要轉換的字串(一定是列舉中有的),第三個是否忽略大小寫.
注意:列舉型別的基型別是除 Char 外的任何整型,所以列舉型別的值是整型值。什麼意思呢?
看下例:
enum Colors{Red,Green,Blue,Yellow}//Red=0,Green=1,Blue=2,Yellow=3,預設從0開始,如果指定red=3,則從3開始
Enum-->string
利用Tostring()方法.
Colors color=Colors.Red;
strong str = color.ToString();
string-->Enum
利用Enum的靜態方法Parse()
Colors color=(Colors)Enum.Parse(typeof(Colors),”red”,blue)
string str = color.ToString();
Console.WriteLine(str);
Console.ReadKey();
Enum-->int
直接使用強制轉換
int blue=(int)Colors.Blue;
int-->Enum
呼叫方法
(1)可以強制轉換將整型轉換成列舉型別。
例如:Colors color = (Colors)2 ,那麼color即為Colors.Blue
(2)利用Enum的靜態方法ToObject。
public static Object ToObject(Type enumType,int value)
例如:Colors color = (Colors)Enum.ToObject(typeof(Colors), 2),那麼color即為Colors.Blue
應該沒有誰願意用第二種辦法吧,想裝13的除外.
如果要判斷某個整型是否定義在列舉中的方法:Enum.IsDefined.
Enum.Isdefined(typeof(Colors),number)