140 votes

Convertir un enum en List<string>

Comment convertir l'Enum suivant en une liste de chaînes de caractères ?

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

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

257voto

Jeremy Thompson Points 14428

Utilisez Enum de la méthode statique, GetNames . Il renvoie un string[] comme ça :

Enum.GetNames(typeof(DataSourceTypes))

Si vous voulez créer une méthode qui ne fait que cela 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();
}

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

38voto

rkmorgan Points 18

Je veux ajouter une autre solution : Dans mon cas, j'ai besoin d'utiliser un groupe Enum dans une liste de boutons déroulants. Ainsi, ils pourraient avoir de l'espace, c'est-à-dire que des descriptions plus conviviales sont 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'aide (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'articles.

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

ADDITION : Dans tous les cas, si vous voulez mettre en œuvre cette méthode, vous avez besoin de l'extension :GetDescription pour les 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();
        */

    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X