C#中除了簡單的變量類型外,還提供了三種較為復(fù)雜的變量類型,包括枚舉、結(jié)構(gòu)和數(shù)組。本文主要講述枚舉相關(guān)的知識。
枚舉類型(也稱為枚舉),提供了一種有效的方式,來定義可能分配給變量的一組已命名的整數(shù)常量,使用enum關(guān)鍵字聲明。
默認(rèn)情況下,第一個枚舉數(shù)的值為0,之后每個連續(xù)枚舉數(shù)的值加1;若設(shè)置某一枚舉數(shù)的值,之后的枚舉數(shù)仍然按1遞增。示例如下:
enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; enum Number { One = 1, Two, Three, Eleven = 11, Twelve, Thirteen };
枚舉中每個元素的基礎(chǔ)類型都是int,可以使用冒號指明另一種整數(shù)類型。已批準(zhǔn)的枚舉類型有:byte、sbyte、short、ushort、int、uint、long、ulong
enum Month : byte { January, February, March, April, May, June, July, August, September, October, November, December };
枚舉類型的枚舉器列表中元素可以分配為任何值,同時也可以使用計算值
enum MachineState { PowerOff = 0, Running = 5, Sleeping = 10, Hibernating = Sleeping + 5 }
枚舉相關(guān)的轉(zhuǎn)換:
1.轉(zhuǎn)換成整數(shù)
Day today = Day.Wednesday; Console.WriteLine($"today is {today}"); int dayNumber = (int)today; Console.WriteLine($"{today} is day number {dayNumber}"); Month month = Month.January; byte monthNumber = (byte)month; Console.WriteLine($"{month} is month number {monthNumber}");
輸出: 
2.轉(zhuǎn)換成字符串
string todayString = Convert.ToString(today); Console.WriteLine($"Convert.ToString()方式: {todayString}"); string todayString2 = today.ToString(); Console.WriteLine($".ToString()方式:{todayString2}");
輸出:

3.從字符串中獲取枚舉值
Enum.Parse()靜態(tài)方法,帶有3個參數(shù)。第一個參數(shù)是要使用的枚舉類型,其語法是關(guān)鍵字typeof后跟放在括號中的枚舉類名;第二個參數(shù)是要轉(zhuǎn)換的字符串;第三個參數(shù)是一個bool值,指定在進(jìn)行轉(zhuǎn)換時是否忽略大小寫。
string todayData = "Wednesday"; Day dayData = (Day)Enum.Parse(typeof(Day), todayData, true); Console.WriteLine($"Enum.Parse()方法:{dayData}");
輸出:
3個方法: Enum.GetName() 、Enum.GetNames()、Enum.GetValues()
string name = Enum.GetName(typeof(Day), 3); Console.WriteLine(name); Console.WriteLine("The names of the Day Enum are:"); foreach (string str in Enum.GetNames(typeof(Day))) Console.Write(str + " "); Console.WriteLine(); Console.WriteLine("The values of the Day Enum are:"); foreach (int value in Enum.GetValues(typeof(Day))) Console.Write(value + " "); Console.WriteLine();
輸出:

枚舉類型作為位標(biāo)志:定義枚舉時,添加Flags特性,之后便可以對這些值執(zhí)行AND、OR、NOT、XOR按位運算
[Flags] enum WeekDay { None = 0x00, //0000 0000 Sunday = 0x01, //0000 0001 Monday = 0x02, //0000 0010 Tuesday = 0x04, //0000 0100 Wednesday = 0x08, //0000 1000 Thursday = 0x10, //0001 0000 Friday = 0x20, //0010 0000 Saturday = 0x40 //0100 0000 }; [Flags] public enum CarOptions { // The flag for SunRoof is 0001. SunRoof = 0x01, // The flag for Spoiler is 0010. Spoiler = 0x02, // The flag for FogLights is 0100. FogLights = 0x04, // The flag for TintedWindows is 1000. TintedWindows = 0x08, }
AND(&):判斷是否包含該值;OR(|):組合;NOT(~):取反;XOR(^):去除其中一個值
CarOptions options = CarOptions.SunRoof | CarOptions.FogLights; Console.WriteLine(options); Console.WriteLine((int)options); WeekDay meetingDays = WeekDay.Tuesday | WeekDay.Thursday; meetingDays = meetingDays | WeekDay.Friday; Console.WriteLine("Meeting days are {0}", meetingDays); meetingDays = meetingDays ^ WeekDay.Tuesday; Console.WriteLine("Meeting days are {0}", meetingDays); bool test = (meetingDays & WeekDay.Thursday) == WeekDay.Thursday; Console.WriteLine("Thursday {0} a meeting day.", test == true ? "is" : "is not");
輸出:

注釋掉[Flags]后,輸出內(nèi)容為:

參考文章:
http://www.rzrgm.cn/williamwsj/p/6047884.html
https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/enum
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/enumeration-types
浙公網(wǎng)安備 33010602011771號