Konvertieren Sie eine Aufzählung in List <string>

102

Wie konvertiere ich die folgende Aufzählung in eine Liste von Zeichenfolgen?

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

Ich konnte diese genaue Frage nicht finden, diese Aufzählung zur Liste ist die nächstgelegene, aber ich möchte sie speziellList<string>

Jeremy Thompson
quelle

Antworten:

177

Verwenden Sie Enumdie statische Methode GetNames. Es gibt ein string[]wie folgt zurück:

Enum.GetNames(typeof(DataSourceTypes))

Wenn Sie eine Methode erstellen möchten, die nur dies für nur einen Typ von tut enumund dieses Array auch in ein konvertiert, Listkönnen Sie Folgendes schreiben:

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

Sie müssen Using System.Linq;oben in Ihrer Klasse .ToList () verwenden.

DCShannon
quelle
7
@DCShannon Bitte bearbeiten Sie keine gängigen Fragen / Antworten und verkleinern Sie die Erklärungen. Während Sie und ich Kurzcode verstehen, benötigen Neulinge alle zusätzlichen Details, um ihn mit ihren Erkenntnissen zu verknüpfen .
Jeremy Thompson
Es scheint Enum.GetNames(typeof(DataSourceTypes))ein generisches System.Arrayanstelle eines String-Arrays zurückzugeben?
Sookie
@ Sookie, siehe den msdn-Link, dies ist die Signatur der GetNames () -Methode:public static string[] GetNames
Jeremy Thompson
30

Ich möchte eine weitere Lösung hinzufügen: In meinem Fall muss ich eine Aufzählungsgruppe in einer Dropdown-Schaltfläche verwenden. Sie haben möglicherweise Platz, dh es sind benutzerfreundlichere Beschreibungen erforderlich:

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

In einer Hilfsklasse (HelperMethods) habe ich die folgende Methode erstellt:

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

Wenn Sie diesen Helfer anrufen, erhalten Sie eine Liste der Artikelbeschreibungen.

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

ADDITION: Wenn Sie diese Methode implementieren möchten, benötigen Sie auf jeden Fall: GetDescription-Erweiterung für enum. Das benutze ich.

 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
quelle