Pergunta

Eu quero criar um método que leva em um tipo Enum, e volta tudo o que é membros em uma matriz, Como criar tal função?

Tome por exemplo, eu tenho esses dois enums:

public enum Family
{ 
   Brother,
   Sister,
   Father
}

public enum CarType
{ 
   Volkswagen,
   Ferrari,
   BMW
}

Como criar uma função GetEnumList para que ele retorne

  1. {Family.Brother, Family.Sister, Family.Father} para o primeiro caso.
  2. {CarType.Volkswagen, CarType.Ferrari, CarType.BMW} para o segundo caso.

Eu tentei:

private static List<T> GetEnumList<T>()
{
    var enumList = Enum.GetValues(typeof(T))
        .Cast<T>().ToList();
    return enumList;
}

Mas eu tenho um InvalidOperationException:

System.InvalidOperationException: operações ligadas tardias não podem ser executadas em tipos ou métodos para os quais ContainsGenericParameters é verdade. em System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException () em System.Reflection.RuntimeMethodInfo.Invoke (Object obj, invokeAttr BindingFlags, Binder ligante objecto [] parâmetros, cultura CultureInfo, booleano skipVisibilityChecks) em System.Reflection.RuntimeMethodInfo.Invoke (Object obj, invokeAttr BindingFlags, Binder ligante objecto [] parâmetros, cultura CultureInfo) em System.Reflection.MethodBase.Invoke (obj Object, Object [] parâmetros)

Editar: O código acima está trabalhando excelentes-- a razão que eu tenho uma exceção foi porque profiler me causou o erro. Obrigado a todos por suas soluções.

Foi útil?

Solução

Aqui está o código 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;
    }

Outras dicas

(Family[])Enum.GetValues(typeof(Family))

Assim?

private static List<string> GetEnumList<T>()
{
    return Enum.GetNames( typeof( T ) )
           .Select(s => typeof(T).Name + "." + s).ToList();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top