C#ですべての列挙値の配列を取得するにはどうすればよいですか?


91

可能なすべての値を表示したい列挙型があります。そのようなリストを手動で作成する代わりに、列挙型のすべての可能な値の配列またはリストを取得する方法はありますか?例:列挙型がある場合:

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

List<Enumnum>を含むを取得するにはどうすればよい{ TypeA, TypeB, TypeC, TypeD }ですか?


回答:


162

これにより、次を使用して列挙値の単純な配列が取得されますEnum.GetValues

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

そして、これはあなたに一般的なリストを取得します:

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

ありがとう、まさに私が探していたものです!
Mark LeMoine 2010

5
これは私がいつもなぜEnumnum.GetValues()そしてEnumnum.GetNames()存在しないのか疑問に思います。
dalle 2010

8
コンパイル時に要素タイプがわかっている配列変数の場合は、を使用しますvar valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));
Jeppe Stig Nielsen

またはEnum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
mr5 2017年

@ mr5:あなたの例では、どういうActualType意味ですか?列挙Enumnum型の場合、OPの例に含まれるか、基になる型(通常はint)になります。他に何か考えていましたか?
Dirk Vollmar 2017年

16

このコードを試してください:

Enum.GetNames(typeof(Enumnum));

これstring[]により、選択した列挙型のすべての列挙型名を含むが返されます。


1
列挙値の名前を返します。OPは自体の後にあるようです。
Michael Petrotta 2010

6
Enum.GetValues(typeof(Enumnum));

列挙型の値の配列を返します。


5

あなたはこのようにしたいかもしれません:

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

これのすべてのint値はenumです11,22,33,44

これらの値は次の方法で取得できます。

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

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



2

これとともに:

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

そして、次のように値の配列にアクセスできます。

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

1
Enum.GetValuesは文字列を返しません[]
メッセンジャー


1

より一般的な方法を好む場合は、ここにあります。必要に応じて、コンバーターをさらに追加できます。

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

0

また、あなたは使用することができます

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

列挙型のすべての要素をjson形式で取得します。


0

OPはenum、C#ですべての値の配列を取得する方法を尋ねました。

選択したenum値の配列をC#で取得したい場合はどうなりますか?

あなたの列挙型

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

Sundayから選択したい場合Enum

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

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

クレジットは知識のあるtlに行きます。

参照:

1.1。

2.2。

希望は誰かを助けます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.