程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> C#學習筆記(基礎知識回顧)之枚舉,

C#學習筆記(基礎知識回顧)之枚舉,

編輯:關於.NET

C#學習筆記(基礎知識回顧)之枚舉,


一:枚舉的含義  

枚舉是用戶定義的整數類型。在聲明一個枚舉時,要指定該枚舉的示例可以包含的一組可接受的值。還可以給值指定易於記憶的名稱。個人理解就是為一組整數值賦予意義。

二:枚舉的優勢

2.1:枚舉可以使代碼更易於維護,有助於確保給變量指定合法的、期望的值。

2.2:枚舉可以使代碼清晰,用描述性的名稱來表示整數值,增加代碼可讀性。

三:枚舉的使用

      /// <summary>
        /// 聲明一個枚舉,審核狀態
        /// </summary>
        public enum AduitStatus
        {
            草稿 = 0,
            待審核 = 1,
            審核通過 = 2,
            審核退回 = 3
        }

        public static void AuditResource(AduitStatus aduitStatus)
        {
            switch (aduitStatus)
            {
                case AduitStatus.審核通過:
                    //審核通過的操作,比如修改數據庫中該記錄的狀態等等
                    Console.WriteLine("審核通過!");
                    break;
                case AduitStatus.審核退回:
                    //審核退回操作
                    Console.WriteLine("已退回!");
                    break;
                default:
                    Console.WriteLine("hello");
                    break;
            }
        }

四:在實際項目中什麼時候使用枚舉?

4.1個人理解枚舉是用來存儲一組不會輕易改變的值,比如性別:未知、男、女。審核狀態:草稿、審核通過、審核退回等。

4.2拿審核狀態來說,數據庫中一般存儲各個狀態的值。而界面顯示的時候需要展示狀態的名稱,比如用0表示草稿、1表示審核通過、2表示審核退回。如果不用枚舉當然也可以實現比如:

public static void AuditResource(int aduitStatus)
{
switch (aduitStatus)
{
case 1:
//審核通過的操作,比如修改數據庫中該記錄的狀態等等
Console.WriteLine("審核通過!");
break;
case 2:
//審核退回操作
Console.WriteLine("已退回!");
break;
default:
Console.WriteLine("hello");
break;
}
}

而顯示的時候根據取到的值,再用代碼值替換成描述性名稱。

foreach (Article article in list)
        {
            string ArticleStatus = "";
            if (article.Status == 0)
            {
                ArticleStatus = "草稿";
            }
            else if (article.Status == 1)
            {
                ArticleStatus = "審核通過";
            }
            else if (article.Status == 2)
            {
                ArticleStatus = "審核退回";
            }
       //……
}

上面這種硬編碼就明顯存在著很多缺點,如其他人單獨看上面一段代碼,可能不明白每個數字的含義,就算是自己時間久了之後也未必能夠記住每個值的含義,再閱讀到這邊代碼的時候就難以理解,而且顯示的名稱沒有個標准,不同的人描述不同狀態有自己的叫法。

像上面這種用到Switch的情況,很多時候都可以用枚舉實現。比如下面的代碼,swicth語句中的值用枚舉實現,而顯示一個類中的狀態名稱時候根據這個值轉換為枚舉裡面的名稱。這樣代碼更容易理解,顯示也會統一。

class Program
    {
        /// <summary>
        /// 聲明一個枚舉,審核狀態
        /// </summary>
        public enum AduitStatus
        {
            草稿 = 0,
            審核通過 = 1,
            審核退回 = 2
        }
        public class Artice
        {
            public string Title { get; set; }
            public int status { get; set; }
        }
        static void Main(string[] args)
        {
            Console.WriteLine("該資源審核是否通過?(Y/N)");
            string isPass = Convert.ToString(Console.ReadLine());
            if (isPass.ToUpper() == "Y")
            {
                AuditResource(AduitStatus.審核通過);
            }
            else
            {
                AuditResource(AduitStatus.審核退回);
            }
            Artice Ar = new Artice() { Title = "C#學習筆記", status = 0 };
            Console.WriteLine("標題:{0},狀態:{1}", Ar.Title, (AduitStatus)(Ar.status));//輸出“標題:C#學習筆記,狀態:草稿”
            Console.ReadKey();
        }

        public static void AuditResource(AduitStatus aduitStatus)
        {
            switch (aduitStatus)
            {
                case AduitStatus.審核通過:
                    //審核通過的操作,比如修改數據庫中該記錄的狀態等
                    Console.WriteLine(AduitStatus.審核通過);
                    break;
                case AduitStatus.審核退回:
                    //審核退回操作
                    Console.WriteLine(AduitStatus.審核退回);
                    break;
                default:
                    Console.WriteLine("hello");
                    break;
            }
        }
    }

允許結果

 

4.3再比如性別,前端可能用單項選擇框來實現,當然可以在頁面上把男、女選項列出來,並寫死每個項的值,其缺點和上面類似,這種情況下也可以考慮用枚舉來定義。

5:關於使用一組有含義的值的其他解決方式

比如城市重點項目類型:基礎設施類項目,產業類項目,制造業項目,可能今年是這些第二年又會增加一些項目類型,如服務業項目。像這種一組值雖然也可以用枚舉來做,但是第二年增加新項目類型的時候需要去調整代碼,而這屬於一開始就知道可能改變的,是正常增加,不應該去調整程序代碼。像這種一組容易變化的值,一般使用數據字典表來存儲,可以動態去配置這些代碼項。

數據字典表一般使用一張主表和一張子表,主表存儲整個系統中所有的可配置項名稱如:圖書類別,重大項目類型。子表存儲該類的值別具體的名稱、值、排序、層級等等,而其他具體有用到這些代碼值的表,和這兩種表關聯處理。總之對於不確定的一組有含義的值最好使用可配置的方式維護,不會輕易改變的一組有含義的值可以用枚舉實現。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved