122

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 }?

1

11 Answers 11

210

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();
Sign up to request clarification or add additional context in comments.

6 Comments

This makes me always wonder why Enumnum.GetValues() and Enumnum.GetNames() doesn't exist.
For an array variable where the element type is known at compile-time, use var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));.
Or Enum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
@mr5: In your example, what should ActualType mean? For an enum, it would be Enumnum in the OP's example, or it could be the underlying type (usually int). Did you have anything else in mind?
If you want an ordinary array, use Enum.GetValues(typeof(TSomeEnum)).Cast<TSomeEnum>().ToArray(); Enum.GetValues returns System.Array Or use direct cast: (TSomeEnumType[])Enum.GetValues(typeof(TSomeEnumType)) This is the shorted syntax. If you want an array the answer above shows this.
|
20

Try this code:

Enum.GetNames(typeof(Enumnum));

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

1 Comment

Returns names of the enum values; OP seems to be after the values themselves.
16

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

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

MS Doc: Enum.GetValues

Comments

8
Enum.GetValues(typeof(Enumnum));

returns an array of the values in the Enum.

Comments

7

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.

Comments

5

You can use

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

This returns an array!

Comments

4

Something little different:

typeof(SomeEnum).GetEnumValues();

Comments

3

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

Comments

2

with this:

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

and you can access values array like so:

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

1 Comment

Enum.GetValues doesn't return a string[]
2

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.

1 Comment

This method works for me. Namely the use of linq to set the data post cast
0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.