C#显式类型转换枚举

C#显式类型转换枚举,c#,typecast-operator,C#,Typecast Operator,我需要创建任何枚举类型的对象列表,并将其传递到下面的函数中。我不知道它将是什么类型,但它可以是我的项目中许多可能的枚举中的任何一种 public static List<object> CreateEnumList(Enum enumeration) { List<object> returnList = new List<object>(); for (int enumIndex = 0; enumIndex < Enum.GetNa

我需要创建任何枚举类型的对象列表,并将其传递到下面的函数中。我不知道它将是什么类型,但它可以是我的项目中许多可能的枚举中的任何一种

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;
}
公共静态列表CreateEnumList(枚举枚举)
{ 
List returnList=新列表();
对于(int enumIndex=0;enumIndex
如何使类型转换正常工作?返回值必须是对象列表。 谢谢

这就够了

public static List<object> CreateEnumList(Enum enumeration)
{ 
    return Enum.GetValues(enumeration.GetType()).Cast<object>().ToList();
}
公共静态列表CreateEnumList(枚举枚举)
{ 
返回Enum.GetValues(enumeration.GetType()).Cast().ToList();
}
将完全满足您的需要:

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);
}

解决方案1

它采用枚举类型并返回一个填充了每个枚举项的通用列表

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;
} 
检查这里:

怎么样

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();      
}
public IList GetBoxedEnumValues()
{
类型enumType=typeOf(TEnum);
如果(!enumType.IsEnum)
{
抛出新的NotSupportedException(
string.Format(“\”{0}\”不是枚举,enumType.Name));
}
返回Enum.GetValues(enumType.Cast().ToList();
}

您想添加到退货列表中的具体内容是什么?在您得到的代码中,您只是试图将当前迭代编号添加到列表中。您的意思是什么?我需要创建一个类的实例,该类的构造函数采用该列表,而该类不是由我编写的,因此我无法更改它。Filip,我想迭代所有可能的枚举值,并将它们添加到列表中。比如returnList.Add((OnePossibleEnumeration)enumIndex);如果我知道确切的枚举类型,我可以这样简单的例子,但我希望它适用于所有枚举否。您需要
枚举。GetType()
@ErenErsönmez:这样做了。谢谢。用法有点奇怪,您必须传递枚举的成员,而不是枚举本身。他说“返回值必须是对象列表”。否则,我推荐这个解决方案,因为它是强类型的。
public static List<T> CreateEnumList<T>(Enum enumeration)  
{
    return Enum.GetValues(typeof(T)).Cast<T>().ToList();
}
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();      
}