C#基礎篇-枚舉類型

一:枚舉相關知識

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();
          
        }
    }

運行效果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章