繁体   English   中英

列表<T>其中 T:枚举

[英]List<T> where T: enum

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

例如

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)) 不存在。 所以我希望有一种方法来构建一个枚举列表,而不是枚举类型,并迭代该列表。 此外,如果有一种方法,如果我有一个类型,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>();
}

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

你不能。 并且您的代码没有意义,您的示例将其视为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

等等..

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM