Как получить все значения Enum? - PullRequest
6 голосов
/ 29 апреля 2009

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

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

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. в System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException () в System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder Binder, параметры Object [], CultureInfo culture, логическое skipVisibilityChecks) в System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder binder, Object [] параметры, CultureInfo culture) в System.Reflection.MethodBase.Invoke (параметры объекта, параметры объекта [])

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

Ответы [ 3 ]

15 голосов
/ 29 апреля 2009

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

    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;
    }
7 голосов
/ 29 апреля 2009
(Family[])Enum.GetValues(typeof(Family))
3 голосов
/ 29 апреля 2009

Как это?

private static List<string> GetEnumList<T>()
{
    return Enum.GetNames( typeof( T ) )
           .Select(s => typeof(T).Name + "." + s).ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...