列出<t>其中T:enum </t>

时间:2014-04-22 15:15:19

标签: c# enums

我想创建一个枚举列表,就像我可以创建一个枚举类型列表,

e.g。

public enum Enum1{
    Member1,
    Member2,
    Member3
}

public enum Enum2 {
    Member1,
    Member2,
    Member3
}

public List<Type> EnumTypes = new List<Type> { 
    typeof(Enum1),
    typeof(Enum2),
}

工作正常,但

public List<System.Enum> EnumTypes = new List<System.Enum> { 
    Enum1,
    Enum2
};

不起作用。

我想添加以下详细信息: 我的代码的第一部分工作,它一直在运行... 第二部分不起作用,我提到了。 我想在底层问题中添加更多细节:

我的情况是我有一系列枚举类型(即EnumTypes)。我遍历列表做一些事情。不幸的是,我需要扩展主体并调用Enumhelper.GetEnumNames,其中T axtually是一个枚举。我使用WEC7,其中Enum.GetNames(typeof(MyEnum))不存在。 所以我希望有一种方法可以构建一个Enumerations列表,而不是enumtypes,并迭代该列表。 此外,如果有方法,如果我有一个类型,typeof(T),其中T是枚举,要调用 Enumhelper.GetEnumNames,所以说从它的类型得到一个枚举,这将有很大的帮助。

public void enumtester(){
    foreach (var typeOfEnum in EnumHelper.EnumTypes) {
        ........
        // typeOfEnum is typeof(T), but I do not know how to call the following method
         List<string> names = EnumHelper.GetEnumNames<T>();
}

1 个答案:

答案 0 :(得分:0)

  

我想创建一个枚举列表,就像我可以创建一个枚举类型列表

你不能。并且您的代码没有意义,您的示例会将其作为类型Enum的变量将其添加到列表中,它需要是:EnumTypes.Add(Enum1.Member1);等。

这与此类似:

List<MyObject> foo = new List<MyObject>();
foo.Add(MyObject);

显然不会工作。

为什么不这样做呢:

public static class EnumTypes
{
    public enum Enum1
    {
        Member1,
        Member2,
        Member3
    }

    public enum Enum2
    {
        Member1,
        Member2,
        Member3
    }
}

然后你可以访问这样的枚举成员:

EnumTypes.Enum1.Member1

等。

这样你甚至不需要包含所有枚举的列表,当你向班级添加新的枚举时,你不必更新列表初始化。