Вам действительно нужно использовать метод Linq ToList () :
var myEnumsList = myEnumsArray.ToList();
В документации говорится, что ToList()
возвращает список ", который содержит элементы извходная последовательность".
Если вы действительно хотите использовать эту функцию в своем собственном методе, вы можете сделать это следующим образом:
private static List<T> ToList<T>(T[] enums) where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
{
throw new ArgumentException("T must be an enum.");
}
return enums.ToList();
}
Ограничивающий тип универсального типа T
ограничивает, какие типы могут быть использованы при вызове метода.Enum является struct
и реализует IConvertible
, как описано в здесь .
РЕДАКТИРОВАТЬ:
Поскольку вам действительно нужно использовать System.Массив.Выполните итерацию System.Array, приведите каждое значение к универсальному типу T
и добавьте в список перед возвратом.Рабочий пример:
public static List<T> ToList<T>(Array array) where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
{
throw new ArgumentException("T must be an enum.");
}
List<T> enumValues = new List<T>();
foreach (var enumValue in array)
{
enumValues.Add((T)enumValue);
}
return enumValues;
}
РЕДАКТИРОВАТЬ # 2 Обновление после комментариев.
public static IList ToList(Array array)
{
Type elementType = array.GetType().GetElementType();
Type listType = typeof(List<>).MakeGenericType(new[] { elementType });
IList list = (IList)Activator.CreateInstance(listType);
foreach (var enumValue in array)
{
list.Add(enumValue);
}
return list;
}