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

  1. {Family.Brother, Family.Sister, Family.Father} pour le premier cas.
  2. {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.

Était-ce utile?

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();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top