簡體   English   中英

C#如何檢索修改后的枚舉名稱值

[英]C# how to retrieve a modified Enum Name value

我有一個真正的功能強大的API,其中到處都有使用命名約定的返回值...從駝峰到Pascal到大寫再到帶有空格的字符串...真是一團糟...

因此,為了序列化或反序列化,使用json.net很簡單,只需添加jsonSerializer或添加具有json屬性的類,如下所示:

[JsonProperty(PropertyName = "somebanged upName")]
public string[] SomethingBangedUp;

在將一些值賦值給枚舉時,我也想做類似的事情,然后獲取“敲打名稱”列表而不是變量名稱:

public enum SomeBangedUpEnum
{
    [EnumMember(Value = "someThingelse BangedUp")]
    SomethingElseBangedUp,
}

var v = Enum.GetNames(typeof(SomeBangedUpEnum)).ToList();

但這檢索了變量名稱“ SomethingElseBangedUp”,而不是我希望的“ someThingelse BangedUp”;

知道如何獲取EnumMember屬性設置的值嗎?

屬性是元數據。 如果要讀取元數據,則應使用反射。 您可以使用GetCustomAttribute擴展從類型成員讀取屬性值。 例如,如果您想獲取枚舉成員的所有名稱:

var v = typeof(SomeBangedUpEnum)
   .GetFields(BindingFlags.Public|BindingFlags.Static)
   .Select(f => f.GetCustomAttribute<EnumMemberAttribute>()?.Value)
   .ToList();

或者,如果您想獲取某個特定枚舉成員的名稱,則只能獲取特定字段,而不是獲取所有字段:

var name = typeof(SomeBangedUpEnum)
    .GetField(SomeBangedUpEnum.SomethingElseBangedUp.ToString())
    .GetCustomAttribute<EnumMemberAttribute>()?.Value;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM