簡體   English   中英

C# 如何獲取 [EnumMember] 中的枚舉字符串列表?

[英]C# How can I get a list of enum string in [EnumMember]?

我嘗試獲取 [EnumMember] 中的值列表,但它不起作用。 它返回枚舉名稱列表,而不是 [EnumMember] 中的值。

我舉個例子來說明我想要什么:

CarEnum.cs

[JsonConverter(typeof(JsonStringEnumConverter))]
public enum CarEnum
{
    [EnumMember(Value = @"Rolls Royce")]
    RollsRoyce=1,

    [EnumMember(Value = @"Honda")]
    Honda = 2,

    [EnumMember(Value = @"Mercedes Benz")]
    MercedesBenz = 3,
}

這是我嘗試獲取值的代碼:

var carList = Enum.GetValues(typeof(CarEnum)).Cast<CarEnum>()
                            .Select(x => x.ToString())
                            .ToList();

carList返回["RollsRoyce", "Honda", "MercedesBenz"]的列表。

我希望它返回["Rolls Royce", "Honda", "Mercedes Benz"] (值包含品牌名稱中的空格)。

如果你能幫助我,請告訴我。

謝謝。

感謝@phuzi 在評論中提供參考帖子。

根據帖子,我已將答案修改如下,並且可以正常工作。

public static List<string> GetEnumMemberValues<T>() where T : struct, IConvertible
    {
        List<string> list = new List<string>();
        var members = typeof(T)
             .GetTypeInfo()
             .DeclaredMembers;
        foreach (var member in members)
        {
            var val = member?.GetCustomAttribute<EnumMemberAttribute>(false)?.Value;
            if (!string.IsNullOrEmpty(val))
                list.Add(val);
        }

        return list;
    }

用法:

  1. 將該方法放入 class 中。 我把它放到 EnumExtension 中。

  2. 像這樣調用這個方法:

    var carList = EnumExtension.GetEnumMemberValues();

  3. carList返回["Rolls Royce", "Honda", "Mercedes Benz"]

暫無
暫無

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

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