【问题标题】:How to get an array of all enum values in C#?如何在 C# 中获取所有枚举值的数组?
【发布时间】:2011-04-18 12:27:50
【问题描述】:

我有一个枚举,我想显示它的所有可能值。有没有办法获取枚举的所有可能值的数组或列表,而不是手动创建这样的列表?例如如果我有一个枚举:

public enum Enumnum { TypeA, TypeB, TypeC, TypeD }

如何获得包含{ TypeA, TypeB, TypeC, TypeD }List<Enumnum>

【问题讨论】:

标签: c# enums


【解决方案1】:

这将为您提供一个使用 Enum.GetValues 的枚举值的普通数组:

var valuesAsArray = Enum.GetValues(typeof(Enumnum));

这将为您提供一个通用列表:

var valuesAsList = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList();

【讨论】:

  • 谢谢,正是我想要的!
  • 这让我一直想知道为什么Enumnum.GetValues()Enumnum.GetNames() 不存在。
  • 对于在编译时元素类型已知的数组变量,使用var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));
  • Enum.GetValues(typeof(Enumnum)).Cast&lt;ActualType&gt;().ToList();
  • @mr5:在你的例子中,ActualType 应该是什么意思?对于枚举,在 OP 的示例中它将是 Enumnum,或者它可能是底层类型(通常是 int)。你还有什么想法吗?
【解决方案2】:

试试这个代码:

Enum.GetNames(typeof(Enumnum));

这会返回一个string[],其中包含所选枚举的所有枚举名称。

【讨论】:

  • 返回枚举值的名称; OP 似乎在 values 本身之后。
【解决方案3】:
Enum.GetValues(typeof(Enumnum));

返回枚举中值的数组。

【讨论】:

    【解决方案4】:

    你可能想这样做:

    public enum Enumnum { 
                TypeA = 11,
                TypeB = 22,
                TypeC = 33,
                TypeD = 44
            }
    

    这个enum的所有int值都是11,22,33,44

    您可以通过以下方式获取这些值:

    var enumsValues = Enum.GetValues(typeof(Enumnum)).Cast<Enumnum>().ToList().Select(e => (int)e);
    

    string.Join(",", enumsValues)11,22,33,44

    【讨论】:

      【解决方案5】:

      有点不同:

      typeof(SomeEnum).GetEnumValues();
      

      【讨论】:

        【解决方案6】:

        你可以使用

        Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().ToArray();
        

        这会返回一个数组!

        【讨论】:

          【解决方案7】:

          用这个:

          string[] myArray = Enum.GetNames(typeof(Enumnum));

          你可以像这样访问值数组:

          Array myArray = Enum.GetValues(typeof(Enumnum));

          【讨论】:

          • Enum.GetValues 不返回字符串[]
          【解决方案8】:

          如果您更喜欢更通用的方式,这里就是。您可以根据需要添加更多转换器。

              public static class EnumConverter
              {
          
                  public static string[] ToNameArray<T>()
                  {
                      return Enum.GetNames(typeof(T)).ToArray();
                  }
          
                  public static Array ToValueArray<T>()
                  {
                      return Enum.GetValues(typeof(T));
                  }
          
                  public static List<T> ToListOfValues<T>()
                  {
                      return Enum.GetValues(typeof(T)).Cast<T>().ToList();
                  }
          
          
                  public static IEnumerable<T> ToEnumerable<T>()
                  {
                      return (T[])Enum.GetValues(typeof(T));
                  }
          
              }
          

          示例实现:

             string[] roles = EnumConverter.ToStringArray<ePermittedRoles>();
             List<ePermittedRoles> roles2 = EnumConverter.ToListOfValues<ePermittedRoles>();
             Array data = EnumConverter.ToValueArray<ePermittedRoles>();
          

          【讨论】:

            【解决方案9】:

            OP 询问如何在 C# 中获取所有 enum 值的数组?

            如果您想在 C# 中获取一组选定的 enum 值怎么办?

            你的枚举

                enum WeekDays 
                {
                    Sunday, 
                    Monday,
                    Tuesday
                }
            

            如果您只想从Enum 中选择Sunday

              WeekDays[] weekDaysArray1 = new WeekDays[] { WeekDays.Sunday };
            
              WeekDays[] weekDaysArray2 = Enum.GetValues(typeof(WeekDays)).Cast<WeekDays>().Where
              (x => x == WeekDays.Sunday).ToArray();
            

            功劳归于知识渊博的 tl。

            参考资料:

            1.

            2.

            希望能帮助别人。

            【讨论】:

            • 这个方法对我有用。即使用linq设置数据post cast
            【解决方案10】:

            现在使用 .NET 5.0 中的通用方法更容易。

            ColorEnum[] colors = Enum.GetValues<ColorEnum>();
            

            MS Doc: Enum.GetValues

            【讨论】:

              【解决方案11】:

              你也可以使用

              var enumAsJson=typeof(SomeEnum).Name + ":[" + string.Join(",", Enum.GetValues(typeof(SomeEnum)).Cast<SomeEnum>().Select(e => e.ToString())) + "]";
              

              用于以 json 格式获取枚举中的所有元素。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-01-02
                • 2020-01-12
                • 2021-12-15
                • 2011-01-17
                • 2023-02-03
                • 2011-10-20
                • 1970-01-01
                • 2011-10-12
                相关资源
                最近更新 更多