繁体   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