【问题标题】:Get a List of available Enums获取可用枚举列表
【发布时间】:2009-04-24 23:50:51
【问题描述】:

我的枚举结构如下:

public enum MyEnum
{
   One=1,
   Two=2,
   Three=3
}

现在我想获取MyEnum 的列表,即List<MyEnum>,其中包含所有OneTwoThreeAgain,我正在寻找一个能做到这一点的班轮。我提出了一个 LINQ 查询,但它并不令人满意,因为它有点太长了,我认为:

Enum.GetNames(typeof(MyEnum))
                            .Select(exEnum =>
                                (MyEnum)Enum.Parse(typeof(MyEnum), exEnum))
                            .ToList();

更好的建议?

【问题讨论】:

    标签: c#


    【解决方案1】:
    Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>();
    

    【讨论】:

    • 当然,如果你真的需要特别制作一个List,可以使用ToList()。
    【解决方案2】:

    我同意@mquander 的代码。

    但是,我建议您也缓存该列表,因为它极不可能在您的程序执行过程中发生变化。将它放在某个全局位置的静态只读变量中:

    public static class MyGlobals
    {
       public static readonly List<MyEnum> EnumList = 
           Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().ToList();
    }
    

    【讨论】:

      【解决方案3】:

      不是一个单一的衬里(实现不是,但方法是:P),但可能会添加类似 this 的东西到一个工具/实用程序类中,它将返回一个通用列表:

      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");
      
       return new List<T>(Enum.GetValues(enumType) as IEnumerable<T>);
      
      }
      

      【讨论】:

      • 我更喜欢我自己的解决方案。
      • 如果 C# 有一个“where T : enum”通用约束不是很好吗?
      • 没关系,但你真的需要否决我的建议吗?呵呵
      • 谢谢,但我已经在我的帖子 Olivieri 中提供了指向该链接的链接
      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 2022-11-23
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多