web-dev-qa-db-fra.com

Convertir une énumération en liste <string>

Comment convertir l'énumération suivante en une liste de chaînes?

[Flags]
public enum DataSourceTypes
{
    None = 0,
    Grid = 1,
    ExcelFile = 2,
    ODBC = 4
};

Je ne pouvais pas trouver cette question exacte, ce Enum to List est le plus proche, mais je veux spécifiquement List<string>

83
Jeremy Thompson

Utilisez la méthode statique de Enum, GetNames . Il retourne un string[], ainsi:

Enum.GetNames(typeof(DataSourceTypes))

Si vous voulez créer une méthode qui ne fait cela que pour un seul type de enum et convertit également ce tableau en un List, vous pouvez écrire quelque chose comme ceci:

public List<string> GetDataSourceTypes()
{
    return Enum.GetNames(typeof(DataSourceTypes)).ToList();
}
150
Jeremy Thompson

Je souhaite ajouter une autre solution: dans mon cas, je dois utiliser un groupe Enum dans une liste d'éléments de liste déroulante. Donc, ils pourraient avoir de l’espace, c’est-à-dire plus de descriptions faciles à utiliser:

  public enum CancelReasonsEnum
{
    [Description("In Rush")]
    InRush,
    [Description("Need more coffee")]
    NeedMoreCoffee,
    [Description("Call me back in 5 minutes!")]
    In5Minutes
}

Dans une classe d'assistance (HelperMethods), j'ai créé la méthode suivante:

 public static List<string> GetListOfDescription<T>() where T : struct
    {
        Type t = typeof(T);
        return !t.IsEnum ? null : Enum.GetValues(t).Cast<Enum>().Select(x => x.GetDescription()).ToList();
    }

Lorsque vous appelez cette aide, vous obtenez la liste des descriptions d’éléments.

 List<string> items = HelperMethods.GetListOfDescription<CancelReasonEnum>();

ADDITION: Dans tous les cas, si vous souhaitez implémenter cette méthode, vous avez besoin de: Extension GetDescription pour enum. C'est ce que j'utilise.

 public static string GetDescription(this Enum value)
    {
        Type type = value.GetType();
        string name = Enum.GetName(type, value);
        if (name != null)
        {
            FieldInfo field = type.GetField(name);
            if (field != null)
            {
                DescriptionAttribute attr =Attribute.GetCustomAttribute(field,typeof(DescriptionAttribute)) as DescriptionAttribute;
                if (attr != null)
                {
                    return attr.Description;
                }
            }
        }
        return null;
        /* how to use
            MyEnum x = MyEnum.NeedMoreCoffee;
            string description = x.GetDescription();
        */

    }
27
rkmorgan