Вопрос
Я хочу создать метод, который принимает Enum
type и возвращает все его члены в массиве. Как создать такую функцию?
Возьмем, к примеру, у меня есть два перечисления:
public enum Family
{
Brother,
Sister,
Father
}
public enum CarType
{
Volkswagen,
Ferrari,
BMW
}
Как создать функцию GetEnumList
чтобы оно вернулось
{Family.Brother, Family.Sister, Family.Father}
для первого случая.{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();
}