Mark LeMoine
Mark LeMoine

Reputation: 4618

How to get an array of all enum values in C#?

I have an enum that I'd like to display all possible values of. Is there a way to get an array or list of all the possible values of the enum instead of manually creating such a list? e.g. If I have an enum:

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

how would I be able to get a List<Enumnum> that contains { TypeA, TypeB, TypeC, TypeD }?

Upvotes: 121

Views: 132809

Answers (11)

Jordan Ryder
Jordan Ryder

Reputation: 2812

This is way easier now with the generic method in .NET 5.0.

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

MS Doc: Enum.GetValues

Upvotes: 16

Shaiju T
Shaiju T

Reputation: 6609

The OP asked for How to get an array of all enum values in C# ?

What if you want to get an array of selected enum values in C# ?

Your Enum

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

If you want to just select Sunday from your Enum.

  WeekDays[] weekDaysArray1 = new WeekDays[] { WeekDays.Sunday };

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

Credits goes to knowledgeable tl.

References:

1.

2.

Hope helps someone.

Upvotes: 2

Ozesh
Ozesh

Reputation: 6964

If you prefer a more generic way, here it is. You can add up more converters as per your need.

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

    }

Sample Implementations :

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

Upvotes: 3

Ali Soltani
Ali Soltani

Reputation: 9927

You may want to do like this:

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

All int values of this enum is 11,22,33,44.

You can get these values by this:

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

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

Upvotes: 7

Termininja
Termininja

Reputation: 7036

Something little different:

typeof(SomeEnum).GetEnumValues();

Upvotes: 4

Meysam
Meysam

Reputation: 11

also you can use

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

for get all elements in enum as json format.

Upvotes: 0

Dr TJ
Dr TJ

Reputation: 3356

with this:

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

and you can access values array like so:

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

Upvotes: 2

&#216;yvind Br&#229;then
&#216;yvind Br&#229;then

Reputation: 60694

Try this code:

Enum.GetNames(typeof(Enumnum));

This return a string[] with all the enum names of the chosen enum.

Upvotes: 20

Mitchel Sellers
Mitchel Sellers

Reputation: 63126

You can use

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

This returns an array!

Upvotes: 5

duraz0rz
duraz0rz

Reputation: 397

Enum.GetValues(typeof(Enumnum));

returns an array of the values in the Enum.

Upvotes: 8

Dirk Vollmar
Dirk Vollmar

Reputation: 176159

This gets you a plain array of the enum values using Enum.GetValues:

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

And this gets you a generic list:

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

Upvotes: 209

Related Questions