1. 程式人生 > >enum 列舉一般用法 dotnet

enum 列舉一般用法 dotnet

public enum Demo 
{
[Description("Moning描述")]
Moning = 0, 
[Description("Afternoon描述")]
Afternoon = 1, 
[Description("Evening描述")]
Evening = 2, 
}

 

列舉方法

1、獲取列舉字串

Demo time = Demo.Afternoon;

Console.WriteLine(time.ToString());//輸出:Afternoon

2、Enum.Parse()方法。這個方法帶3個引數,第一個引數是要使用的列舉型別。其語法是關鍵字typeof後跟放在括號中的列舉類名。typeof運算子將在第5章詳細論述。第二個引數是要轉換的字串,第三個引數是一個bool,指定在進行轉換時是否忽略大小寫。最後,注意Enum.Parse()方法實際上返回一個物件引用——我們需要把這個字串顯式轉換為需要的列舉型別(這是一個取消裝箱操作的例子)。對於上面的程式碼,將返回1,作為一個物件,對應於Demo.Afternoon的列舉值。在顯式轉換為int時,會再次生成1。

Demo time2 = (Demo) Enum.Parse(typeof(Demo), “afternoon”, true);

Console.WriteLine((int)time2);//輸出1

Demo time3 = Enum.Parse<Demo>("1");

Console.WriteLine((int)time3.Afternoon );//輸出1

3、得到列舉的某一值對應的名稱

var Text = Enum.GetName(typeof(Demo), 0);
var Text = ((Demo)0).ToString();//返回:Morning

兩種方法都能實現,但是當其值越界(不是列舉所列出的值),就有一定的區別了。大家可以根據自己的需求不同,選擇合適的方法。

var Text = ((Demo)5).ToString(); //返回:5,如果越界返回原值

this.lbGetName.Text = Enum.GetName(typeof(Demo), 5); //返回:空字串,如果越界返回空字串

4、得到列舉的所有的值

foreach (int i in Enum.GetValues(typeof(Demo)))
     Text += i.ToString();
5、列舉所有的名稱

foreach(string temp in Enum.GetNames(typeof(Demo)))
     Text+=temp;
6、列舉的Description值

    public static class EnumExtensions
    {
        public static string GetDescription(this Enum value)
        {
            return value.GetType()
                  .GetMember(value.ToString())
                  .FirstOrDefault()?
                  .GetCustomAttribute<DescriptionAttribute>()?
                  .Description;
        }
    }

var  Text=Demo.Afternoon.GetDescription()