【问题标题】:List<T> where T: enumList<T> 其中 T:枚举
【发布时间】:2014-04-22 15:15:18
【问题描述】:

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

例如

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

【问题讨论】:

  • 正确。问题是什么?
  • @João I would like to 有点暗示问题how do I?
  • @Rawling 确实如此,但我无法从他的代码 sn-ps 中准确收集到他想要做什么。他的代码不仅不起作用,而且没有任何意义......
  • 我是你害怕你会这么说。实际上,我陷入了一种情况,即我有一个 EnumTypes 列表(如定义),但我想调用一个方法,该方法需要枚举作为参数,签名是 public List GetEnumNames()。 T 是枚举,而不是 typeof(enum),我使用 WEC7,其中未定义 enum.getvalues 和 enum.getnames

标签: c# enums


【解决方案1】:

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

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

等等。

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

【讨论】:

  • 感谢您的回答。不幸的是,我相信我需要这个列表,因为我遍历它,调用一个非常枚举的方法,就像我在我的问题中添加的那样
  • 那么你需要手动添加每个枚举成员而不是:EnumTypes.Add(Enum1) EnumTypes.Add(Enum1.Member1); 等..
猜你喜欢
  • 2014-01-27
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
  • 2010-11-30
  • 2019-11-08
  • 2021-11-12
相关资源
最近更新 更多