Convertir une énumération en List <string>

102

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

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

Je n'ai pas pu trouver cette question exacte, cet Enum to List est le plus proche mais je veux spécifiquementList<string>

Jeremy Thompson
la source

Réponses:

177

Utilisez Enumla méthode statique de GetNames. Il renvoie a string[], comme ceci:

Enum.GetNames(typeof(DataSourceTypes))

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

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

Vous aurez besoin Using System.Linq;en haut de votre classe pour utiliser .ToList ()

DCShannon
la source
7
@DCShannon veuillez ne pas modifier les questions / réponses courantes et réduire les explications. Bien que vous et moi comprenions le code abrégé, les débutants ont besoin de tous les détails supplémentaires pour l' associer à leurs apprentissages .
Jeremy Thompson
Il semble Enum.GetNames(typeof(DataSourceTypes))renvoyer un System.Arraytableau générique au lieu d'un tableau de chaînes?
sookie
@sookie, voir le lien msdn, c'est la signature de la méthode GetNames () :public static string[] GetNames
Jeremy Thompson
30

Je souhaite ajouter une autre solution: dans mon cas, je dois utiliser un groupe Enum dans un élément de liste de boutons déroulants. Ils pourraient donc avoir de l'espace, c'est-à-dire des descriptions plus conviviales nécessaires:

  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 cet assistant, vous obtiendrez la liste des descriptions d'articles.

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

ADDITION: Dans tous les cas, si vous souhaitez implémenter cette méthode, vous avez besoin de: l'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();
        */

    }
rkmorgan
la source