列舉型別的資料對應

在寫程式時,多多少少都會寫一些列舉,可以讓程式更加的安全,但有些時候,列舉在變數命名時必須為英文,送到前端時則必須顯示成中文,要怎麼讓中英文產生關連呢?

可以參考以下的作法

 


建立列舉

using System.ComponentModel;

public enum Status
{
    [Description("上線")]
    OnLine = 10,
}

再為列舉型別寫一個擴充方法,用意在於傳回當前列舉Description內的值

using System;
using System.ComponentModel;
using System.Reflection;

public static class ExtenxionMethod
{
    public static string ExtGetAttributeDescription(this Enum en)
    {
        Type type = en.GetType();
        MemberInfo[] members = type.GetMember(en.ToString());

        // 如果沒有任何attribute則報錯
        if (members == null)
            throw new ArgumentException("There is no property in this attribute");

        object[] attributes = members[0].GetCustomAttributes(typeof(DescriptionAttribute), false);

        // 如果attribute中沒有description則報錯
        if (attributes == null)
            throw new ArgumentException("There is no attribute in this description");

        return ((DescriptionAttribute)attributes[0]).Description;
    }
}

 

呼叫方式

Status status = (Status)10;

Console.WriteLine(status.ExtGetAttributeDescription());
Console.ReadKey();

 

印出來的結果

這樣就可以列舉也可以傳回適合讓使用者觀看的資料了


LINE討論群FB討論區

歡迎您的加入,讓這個社群更加美好!

聯絡方式:
FaceBook
E-Mail