[.NET] 如何透過 DisplayName 或 Description 自訂 Enum 字串


[.NET] 如何透過 DisplayName 或 Description 自訂 Enum 字串

An enumeration type (or enum type) is a value type defined by a set of named constants of the underlying integral numeric type

  1. enum 由一組整數類型命名的常數定義,其為實值類型。

  2. 類型可為 sbyte、byte、short、ushort、int、uint、long、ulong。

public enum Wood : short
{
    Mahogany,
    Maple,
    Cocobolo,
    Cedar,
    Adirondack,
    Alder,
    Sitka,
}

常被用來當作”狀態”的判定,如:

if(httpStatus == HttpStatusCode.OK) {
    // do something
}

也可能會被哪來當作”下拉選單”的條件,如果單純用enum原本名稱顯示遠遠不夠,故下面示範如何自訂與取得想要的字串

// 擴增函式可以透過 "." 方式使用
Wood.Adirondack.GetDisplayName();
Wood.Adirondack.GetDescription();

用 GetMember

public static string GetDisplayName(this Enum enumValue)
{
    var name = enumValue.ToString();
    var memberInfos = enumValue.GetType().GetMember(name);
    var displayName = name;

    if (memberInfos.Any())
    {
        var attribute = memberInfos.First().GetCustomAttribute<DisplayAttribute>();
        displayName = attribute?.GetName() ?? name;
    }

    return displayName;
}

用 GetField (建議)

public static string GetDescription(this Enum enumValue)
{
    var name = enumValue.ToString();
    var field = enumValue.GetType().GetField(name);
    var description = name;

    if (field != null)
    {
        var attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
        description = attribute?.Description ?? name;
    }

    return description;
}

參考

Enum ToString with user friendly strings

Can my enums have friendly names?

Difference between Display and Description attribute

GetMember vs GetField performance in C#

microsoft - Enum

microsoft - Extension Methods

microsoft - Integral numeric types


作者: PuTaoNi
版權聲明: 本站所有文章除特別聲明外,均採用 CC BY 4.0 許可協議。轉載請註明來源 PuTaoNi !
 上一篇
[區塊鏈] 區塊鏈入門術語介紹 [區塊鏈] 區塊鏈入門術語介紹
進入幣圈時常聽到幣友們,講一些完全聽不懂的入門術語,讓我非常頭痛。因此,我記錄一些常用入門術語,讓想進入幣圈的可以快速進入狀況,不會在像鴨子聽雷有聽沒有懂。
2022-04-19
下一篇 
[.NET] [深入淺出物件導向分析與設計] 心得1 : 偉大軟體由此開始 [.NET] [深入淺出物件導向分析與設計] 心得1 : 偉大軟體由此開始
閱讀深入淺出物件導向分析與設計(Head First Object-Oriented Analysis and Design)後,此書將OOA&D以簡單與詼諧的方式進行介紹,並以偉大軟體由此開始的方式,詳述偉大軟體的設計過程。
2022-03-27
  目錄