一:枚舉相關知識
1:相關概念
(來源於:菜鳥編程)
2:相關方法(System.Enum)
備註:抓重點,枚舉是一組命名整型 “常量”,每個符號代表一個正數值,默認爲int32類型(枚舉是值類型,隱式繼承自System.Enum,不能手動修改。System.Enum本身是引用類型,繼承自System.ValueType.)
二:簡單枚舉
1:枚舉的使用方式
①:規定枚舉使用類型
enum sex :byte//顯示指定枚舉的底層數據類型
{
male,
female,//此逗號可以省略
};//此分號可以省略
在main函數裏打印運行下面語句
//獲取sex裏的數字;此時只是獲取枚舉裏的成員名未獲取成員值
Console.WriteLine($"男:{sex.male},女:{sex.female}");
//數據類型轉換一下獲取成員的值
Console.WriteLine($"男:{(int)sex.male} 女:{(int)sex.female}");
運行效果:
②:枚舉採用默認值int32
enum Week
{
//成員的值可以設置成一樣,不填的話,採用0,1,2...這樣的順序默認給值,但是成員名不行
Monday=1,
Tuesday=2,
Wednesday=3,
Sunday=0,
Everyday=1
}
在main函數裏打印運行下面語句
//枚舉值可以一致但是枚舉成員名不能一致
Console.WriteLine($"{(int)Week.Monday};{(int)Week.Everyday}");
運行效果:
2:獲取枚舉成員名或值
①:通過值獲取枚舉成員名
如果枚舉不存在該值,返回null
//【3】通過枚舉名獲取枚舉值,或通過值獲取枚舉名
enum Man
{
劉備 = 1,
關羽 = 2,
張飛 = 3
}
class Program
{
static void Main(string[] args)
{
//【3.1】通過值獲取名
Console.WriteLine($"{Enum.GetName(typeof(Man), 1)}");
//如果枚舉裏無該值?
Console.WriteLine($"{Enum.GetName(typeof(Man), 0)}");//返回爲null
if (Enum.GetName(typeof(Man), 0) == null)
{
Console.WriteLine("該值爲null");
}
Console.ReadLine();
}
}
運行效果:
②:通過枚舉成員名獲取值
如果改名不存在,出現異常“System.ArgumentException”類型的未經處理的異常
//【3】通過枚舉名獲取枚舉值,或通過值獲取枚舉名
enum Man
{
劉備 = 1,
關羽 = 2,
張飛 = 3
}
class Program
{
static void Main(string[] args)
{
//【3.2】通過枚舉成員名獲取值
String name = "劉備";
Console.WriteLine($"{Convert.ToInt32(Enum.Parse(typeof(Man), name))}");
//如果不存在呢?
String name2 = "劉備2";
//出現異常“System.ArgumentException”類型的未經處理的異常在 mscorlib.dll 中發生
//Console.WriteLine($"{Convert.ToInt32(Enum.Parse(typeof(Man), name2))}");
Console.ReadLine();
}
}
運行效果:
三:標誌枚舉
標誌枚舉要在頂部加[System.Flags]特性進行聲明。而且枚舉支持組合運算,標誌相當於通過將值十進制轉爲2進行相應位運算(通過下面例子來理解吧)。
1:例1
//【4】標誌枚舉
[System.Flags]
enum Woman
{
白 = 1,//001
富 = 2,//010
美 = 4//100
}
class Program
{
static void Main(string[] args)
{
var man = Woman.白 | Woman.美;//賦值爲101 001|100=101
Console.WriteLine($"{(int)man}");//101轉換爲十進制5
if ((man & Woman.白) == Woman.白)//101&001=001==白:001 返回爲true
{
Console.WriteLine("此人白!");
}
else
{
Console.WriteLine("此人黑!");
}
Console.ReadLine();
}
}
運行效果:
四:常用操作
【5.1】元素遍歷:
【5.2】單個元素轉換:
【5.3】獲取枚舉類型對應的數值:
【5.4】判斷字符串是否對應枚舉類型:
【5.5】枚舉類型進行轉換:
//【5】常用操作
[System.Flags]
enum EColors
{
Red = 1,
Green = 2,
Blue = 4,
Yellow = 8
}
class Program
{
static void Main(string[] args)
{
//【5.1】元素遍歷:
//遍歷枚舉類型的所有數據
string[] strs = Enum.GetNames(typeof(EColors));
foreach (string str in strs)
{
Console.WriteLine(str);
}
//【5.2】單個元素轉換:
//獲取單個枚舉類型對應的字符串
string strBlue = Enum.GetName(typeof(EColors), EColors.Blue);
Console.WriteLine("顏色{0}表示{1}顏色!", EColors.Blue, strBlue);
//【5.3】獲取枚舉類型對應的數值:
//獲取枚舉類型對應的數值
int[] numbers = (int[])Enum.GetValues(typeof(EColors));
foreach (int item in numbers)
{
Console.WriteLine(item);
}
//【5.4】判斷字符串是否對應枚舉類型:
Console.WriteLine($"Red是否存在:{Enum.IsDefined(typeof(EColors),"Red")}");
//是區分大小寫的
Console.WriteLine($"Red是否存在:{Enum.IsDefined(typeof(EColors), "red")}");
//【5.5】枚舉類型進行轉換:
object o = Enum.Parse(typeof(EColors), "Green");
EColors color = (EColors)o;
Console.WriteLine("轉換的顏色爲:" + color);
Console.ReadLine();
}
}
運行效果