如何获取Enum描述的字符串列表?

kod*_*kas 3 c# enums types

如何获得Enum值的列表?

例如,我有以下内容:

public enum ContactSubjects
{
    [Description("General Question")]
    General,
    [Description("Availability/Reservation")]
    Reservation,
    [Description("Other Issue")]
    Other
}
Run Code Online (Sandbox Code Playgroud)

我需要做的是将ContactSubject.General作为参数传递,它返回描述的列表.

此方法需要使用任何枚举,而不仅仅是ContactSubject(在我的示例中).签名应该类似于GetEnumDescriptions(枚举值).

aio*_*sov 7

这样的事情可能有用:

    private static IEnumerable<string> GetDescriptions(Type type)
    {
        var descs = new List<string>();
        var names = Enum.GetNames(type);
        foreach (var name in names)
        {
            var field = type.GetField(name);
            var fds = field.GetCustomAttributes(typeof(DescriptionAttribute), true);
            foreach (DescriptionAttribute fd in fds)
            {
                descs.Add(fd.Description);
            }
        }
        return descs;
    }
Run Code Online (Sandbox Code Playgroud)

但是你可以在那里查看一些逻辑:比如可以开始名字吗?你将如何处理多个描述属性?如果其中一些丢失了怎么办 - 你想要一个名字还是像上面那样跳过它?等等

刚刚审核了你的问题.对于VALUE,你会有类似的东西:

private static IEnumerable<string> GetDescriptions(Enum value)
{
    var descs = new List<string>();
    var type = value.GetType();
    var name = Enum.GetName(type, value);
    var field = type.GetField(name);
    var fds = field.GetCustomAttributes(typeof(DescriptionAttribute), true);
    foreach (DescriptionAttribute fd in fds)
    {
        descs.Add(fd.Description);
    }
    return descs;
}
Run Code Online (Sandbox Code Playgroud)

但是不可能在单个字段上放置两个Description属性,所以我猜它可能只返回字符串.