2009-04-29 22 views
3

Ich möchte eine Methode erstellen, die in einem Enum Typ, und gibt alle enum innerhalb es in einem Array zurück, wie eine solche Funktion zu erstellen?Alle Werte von Enums erhalten

Nehmen Sie zum Beispiel, ich habe zwei Aufzählungen:

public enum Family 
{ 
    Brother, 
    Sister, 
    Father 
} 

public enum CarType 
{ 
    Volkswagen, 
    Ferrari, 
    BMW 
} 

Wie GetEnumList eine Funktion zu erstellen, so dass es

  1. {Family.Brother, Family.Sister, Family.Father} für den ersten Fall zurückgibt.
  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 : Late bound operations cannot be performed on types or methods for which ContainsGenericParameters is true. 
    at System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException() 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) 

Edit: Der obige Code funktioniert fine-- der Grund, warum ich eine Ausnahme bekam, weil Profiler verursacht mir der Fehler. Danke Ihnen allen für Ihre Lösung.

+0

Es funktionierte gut für mich - können Sie den aufrufenden Code buchen? – RobS

+0

Ja, es funktioniert gut-- Ich habe festgestellt, dass mein Profiler mir tatsächlich einen Fehler verursacht und daher zu der Ausnahme führt. – Graviton

Antwort

12

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; 
    } 
4
(Family[])Enum.GetValues(typeof(Family)) 
+0

Danke, aber ich möchte eine allgemeine Methode, die Enum-Typ übernimmt und die entsprechende Liste zurückgibt - aber eine bestimmte Cast-Funktion. – Graviton

2

Wie das?