Вопрос

Я хочу создать метод, который принимает Enum type и возвращает все его члены в массиве. Как создать такую ​​функцию?

Возьмем, к примеру, у меня есть два перечисления:

public enum Family
{ 
   Brother,
   Sister,
   Father
}

public enum CarType
{ 
   Volkswagen,
   Ferrari,
   BMW
}

Как создать функцию GetEnumList чтобы оно вернулось

  1. {Family.Brother, Family.Sister, Family.Father} для первого случая.
  2. {CarType.Volkswagen, CarType.Ferrari, CarType.BMW} для второго случая.

Я пытался :

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

Но я получил InvalidOperationException:

System.InvalidOperationException:Операции с поздней привязкой не могут выполняться над типами или методами, для которых параметр containsGenericParameters имеет значение true.at System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException() at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj , BindingFlags invokeattr, связующее связующее, объект [] параметры, культура культура) в System.Reflection.methodbase.invoke (объект obj, объект [] параметры)

Редактировать:Приведенный выше код работает нормально. Причина, по которой я получил исключение, заключалась в том, что профилировщик вызвал ошибку.Спасибо всем за ваши решения.

Это было полезно?

Решение

Вот полный код:

    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;
    }

Другие советы

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

Так?

private static List<string> GetEnumList<T>()
{
    return Enum.GetNames( typeof( T ) )
           .Select(s => typeof(T).Name + "." + s).ToList();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top