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

  1. {Family.Brother, Family.Sister, Family.Father} per il primo caso.
  2. {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.

È stato utile?

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();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top