Come ottenere tutti i valori di un Enum?
Domanda
Voglio creare un metodo che accetta un tipo Enum
e restituisce tutti i suoi membri in un array, come creare una tale funzione?
Prendiamo ad esempio, ho questi due enum:
public enum Family
{
Brother,
Sister,
Father
}
public enum CarType
{
Volkswagen,
Ferrari,
BMW
}
Come creare una funzione GetEnumList
in modo che ritorni
-
{Family.Brother, Family.Sister, Family.Father}
per il primo caso. -
{CarType.Volkswagen, CarType.Ferrari, CarType.BMW}
per il secondo caso.
Ho provato:
private static List<T> GetEnumList<T>()
{
var enumList = Enum.GetValues(typeof(T))
.Cast<T>().ToList();
return enumList;
}
Ma ho ricevuto un InvalidOperationException
:
System.InvalidOperationException: le operazioni associate in ritardo non possono essere eseguite su tipi o metodi per i quali ContainsGenericParameters è true. at System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException () at System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder binder, Object [] parametri, CultureInfo culture, Boolean skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder binder, Object [] parametri, CultureInfo culture) at System.Reflection.MethodBase.Invoke (Object obj, Object [] parametri)
Modifica: il codice sopra funziona correttamente, il motivo per cui ho ricevuto un'eccezione è stato perché il profiler mi ha causato l'errore. Grazie a tutti per le vostre soluzioni.
Soluzione
Ecco il codice completo:
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;
}
Altri suggerimenti
(Family[])Enum.GetValues(typeof(Family))
Ti piace?
private static List<string> GetEnumList<T>()
{
return Enum.GetNames( typeof( T ) )
.Select(s => typeof(T).Name + "." + s).ToList();
}