我需要创建一个对象List,无论Enumeration类型被传递到下面的函数中。我不知道它会是什么类型,但它可以是我项目中许多可能的枚举中的任何一种。
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 :(得分:6)
这就够了
public static List<object> CreateEnumList(Enum enumeration)
{
return Enum.GetValues(enumeration.GetType()).Cast<object>().ToList();
}
答案 1 :(得分: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.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();
}
答案 2 :(得分: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 :(得分: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();
}