2012-07-03 1 views
2

Мне нужно создать список объектов любого типа перечисления, который передается в приведенную ниже функцию. Я не знаю, какого типа это будет, но это может быть любая из многих возможных перечислений в моем проекте.C# Явное перечисление литья типов

public static List<object> CreateEnumList(Enum enumeration) 
{ 
    List<object> returnList = new List<object>(); 
    for (int enumIndex = 0; enumIndex < Enum.GetNames(enumeration.GetType()).Length; enumIndex++) 
     returnList.Add((enumeration.GetType())enumIndex); 
    return returnList; 
} 

Как я могу заставить тип приведения работать правильно? Возвращаемое значение ДОЛЖНО быть списком объектов. Спасибо

+0

Что именно ваша цель? –

+0

Что именно вы хотите добавить в свой список возвратов? В коде, который у вас есть, вы просто пытаетесь добавить текущий список итераций в список. –

+0

Что это значит? Мне нужно создать экземпляр класса, конструктор которого принимает этот список , и класс не был написан мной, поэтому я не могу его изменить. – parliament

ответ

6

Это достаточно

public static List<object> CreateEnumList(Enum enumeration) 
{ 
    return Enum.GetValues(enumeration.GetType()).Cast<object>().ToList(); 
} 
+0

'enumeration' не является типом. –

+0

'enumeration' не является типом. –

+0

@ Кевин: Теперь хорошо? –

1

Enum.Parse будет делать именно то, что вам нужно:

returnList.Add(Enum.Parse(enumeration.GetType(), enumIndex.ToString())); 

Например, это печатает b:

enum myEnum { a, b, c } 
static void Main(string[] args) 
{ 
    var e = Enum.Parse(typeof(myEnum), "1"); 
    Console.WriteLine(e); 
} 
3

Решение 1

Generic Enum to List converter (C#) One for the utility library...

Он принимает тип перечисления и возвращает общий список заполняется с каждым элементом перечисления.

public static List<T> EnumToList<T>() 
{ 
    Type enumType = typeof (T); 

    // Can't use type constraints on value types, so have to do check like this 
    if (enumType.BaseType != typeof(Enum)) 
     throw new ArgumentException("T must be of type System.Enum"); 

    Array enumValArray = Enum.GetValues(enumType); 

    List<T> enumValList = new List<T>(enumValArray.Length); 

    foreach (int val in enumValArray) { 
     enumValList.Add((T)Enum.Parse(enumType, val.ToString())); 
    } 

    return enumValList; 
} 

Решение 2

Это возвращает IEnumerable<SomeEnum> всех значений в Enum.

Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>(); 

Если вы хотите, чтобы быть List<SomeEnum>, просто добавьте .ToList() после .Cast<SomeEnum>().

public static List<T> CreateEnumList<T>(Enum enumeration) 
{ 
    return Enum.GetValues(typeof(T)).Cast<T>().ToList(); 
} 

Проверить здесь: How do I convert an enum to a list in C#?

+0

Он сказал: «Возвращаемое значение ДОЛЖНО быть списком объектов». В противном случае я бы рекомендовал это решение по сравнению с другими, потому что оно строго типизировано. –

0

Как насчет

public IList<object> GetBoxedEnumValues<TEnum>() 
{ 
    Type enumType = typeOf(TEnum); 

    if (!enumType.IsEnum) 
    { 
     throw new NotSupportedException(
      string.Format("\"{0}\" is not an Enum", enumType.Name)); 
    } 

    return Enum.GetValues(enumType).Cast<object>().ToList();  
}