Frage

ich eine Methode erstellen möchten, die in einem Enum Typ nimmt, und gibt alle ihre Mitglieder in einer Anordnung, wie eine solche Funktion erstellen?

Nehmen Sie

zum Beispiel, ich habe diese beiden Aufzählungen:

public enum Family
{ 
   Brother,
   Sister,
   Father
}

public enum CarType
{ 
   Volkswagen,
   Ferrari,
   BMW
}

Wie eine Funktion GetEnumList erstellen, so dass es wieder

  1. {Family.Brother, Family.Sister, Family.Father} für den ersten Fall.
  2. {CarType.Volkswagen, CarType.Ferrari, CarType.BMW} für den zweiten Fall.

Ich habe versucht:

private static List<T> GetEnumList<T>()
{
    var enumList = Enum.GetValues(typeof(T))
        .Cast<T>().ToList();
    return enumList;
}

Aber ich habe eine InvalidOperationException:

  

System.InvalidOperationException: Spät gebunden Operationen können nicht auf Typen oder Methoden durchgeführt werden, für die Contains wahr ist.           bei System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException ()           bei System.Reflection.RuntimeMethodInfo.Invoke (Objekt obj, Binding invokeAttr, Binder Bindemittel, Object [] Parameter, Culture Kultur, Boolean skipVisibilityChecks)           bei System.Reflection.RuntimeMethodInfo.Invoke (Objekt obj, Binding invokeAttr, Binder Bindemittel, Object [] Parameter, Culture Kultur)           bei System.Reflection.MethodBase.Invoke (Object obj, Object [] Parameter)

Edit: Der obige Code funktioniert fine-- der Grund, warum ich war eine Ausnahme bekam, weil Profiler mich den Fehler verursacht hat. Vielen Dank für Ihre Lösungen.

War es hilfreich?

Lösung

Hier ist der vollständige Code:

    public enum Family
    {
        Brother,
        Sister,
        Father
    }

    public enum CarType
    {
        Volkswagen,
        Ferrari,
        BMW
    }


    static void Main(string[] args)
    {
        Console.WriteLine(GetEnumList<Family>());
        Console.WriteLine(GetEnumList<Family>().First());
        Console.ReadKey();
    }

    private static List<T> GetEnumList<T>()
    {
        T[] array = (T[])Enum.GetValues(typeof(T));
        List<T> list = new List<T>(array);
        return list;
    }

Andere Tipps

(Family[])Enum.GetValues(typeof(Family))

Wie das?

private static List<string> GetEnumList<T>()
{
    return Enum.GetNames( typeof( T ) )
           .Select(s => typeof(T).Name + "." + s).ToList();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top