Comment obtenir toutes les valeurs d'un Enum?
Question
Je souhaite créer une méthode qui prend un type Enum
et renvoie tous ses membres dans un tableau. Comment créer une telle fonction?
Prenez par exemple, j'ai ces deux énumérations:
public enum Family
{
Brother,
Sister,
Father
}
public enum CarType
{
Volkswagen,
Ferrari,
BMW
}
Comment créer une fonction GetEnumList
afin qu'elle retourne
-
{Family.Brother, Family.Sister, Family.Father}
pour le premier cas. -
{CarType.Volkswagen, CarType.Ferrari, CarType.BMW}
pour le deuxième cas.
j'ai essayé:
private static List<T> GetEnumList<T>()
{
var enumList = Enum.GetValues(typeof(T))
.Cast<T>().ToList();
return enumList;
}
Mais j'ai un InvalidOperationException
:
System.InvalidOperationException: les opérations liées tardives ne peuvent pas être effectuées sur des types ou des méthodes pour lesquels ContainsGenericParameters est true. à System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException () at System.Reflection.RuntimeMethodInfo.Invoke (Objet obj, BindingFlags invokeAttr, classeur Binder, paramètres Object [], culture CultureInfo, booléen skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke (Objet obj, BindingFlags invokeAttr, classeur Binder, paramètres Object [], culture CultureInfo) sur System.Reflection.MethodBase.Invoke (Object obj, Object [] parameters)
Modifier: le code ci-dessus fonctionne correctement - la raison pour laquelle j'ai eu une exception était parce que le profileur m'a causé le bogue. Merci à tous pour vos solutions.
La solution
Voici le code complet:
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;
}
Autres conseils
(Family[])Enum.GetValues(typeof(Family))
Comme ça?
private static List<string> GetEnumList<T>()
{
return Enum.GetNames( typeof( T ) )
.Select(s => typeof(T).Name + "." + s).ToList();
}