Converte un'enumerazione in List <string>


102

Come si converte il seguente Enum in un elenco di stringhe?

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

Non sono riuscito a trovare questa domanda esatta, questo Enum to List è il più vicino ma lo voglio specificamenteList<string>

Risposte:


177

Usa Enumil metodo statico di GetNames. Restituisce un string[], in questo modo:

Enum.GetNames(typeof(DataSourceTypes))

Se vuoi creare un metodo che fa solo questo per un solo tipo di enume converte anche quell'array in a List, puoi scrivere qualcosa del genere:

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

Avrai bisogno Using System.Linq;dell'inizio della tua classe per usare .ToList ()


7
@DCShannon per favore non modificare domande / risposte popolari e rimpicciolire le spiegazioni. Mentre tu ed io comprendiamo il codice abbreviato, i principianti hanno bisogno di tutti i dettagli extra per associarlo ai loro apprendimenti .
Jeremy Thompson,

Sembra Enum.GetNames(typeof(DataSourceTypes))restituire un generico System.Arrayinvece di un array di stringhe?
sookie

@sookie, vedi il link msdn, questa è la firma del metodo GetNames () :public static string[] GetNames
Jeremy Thompson

30

Voglio aggiungere un'altra soluzione: nel mio caso, ho bisogno di utilizzare un gruppo Enum in un elenco di pulsanti a discesa. Quindi potrebbero avere spazio, ovvero sono necessarie descrizioni più user friendly:

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

In una classe helper (HelperMethods) ho creato il seguente metodo:

 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();
    }

Quando chiami questo aiutante, otterrai l'elenco delle descrizioni degli elementi.

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

AGGIUNTA: In ogni caso, se vuoi implementare questo metodo hai bisogno di: Estensione GetDescription per enum. Questo è quello che uso.

 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();
        */

    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.