Bagaimana cara mendapatkan array dari semua nilai enum di C #?


91

Saya memiliki enum yang ingin saya tampilkan semua kemungkinan nilainya. Apakah ada cara untuk mendapatkan larik atau daftar semua kemungkinan nilai enum daripada membuat daftar seperti itu secara manual? mis. Jika saya memiliki enum:

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

bagaimana saya bisa mendapatkan List<Enumnum>yang berisi { TypeA, TypeB, TypeC, TypeD }?


4

Jawaban:


162

Ini memberi Anda array biasa dari nilai enum menggunakan Enum.GetValues:

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

Dan ini memberi Anda daftar umum:

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

Terima kasih, persis seperti yang saya cari!
Mark LeMoine

5
Hal ini membuat saya selalu bertanya-tanya mengapa Enumnum.GetValues()dan Enumnum.GetNames()tidak ada.
dalle

8
Untuk variabel array di mana jenis elemennya diketahui pada waktu kompilasi, gunakan var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));.
Jeppe Stig Nielsen

AtauEnum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
mr5

@ mr5: Dalam contoh Anda, apa ActualTypeartinya? Untuk enum, itu akan menjadi Enumnumcontoh OP, atau bisa jadi tipe yang mendasari (biasanya int). Apakah ada hal lain yang Anda pikirkan?
Dirk Vollmar

16

Coba kode ini:

Enum.GetNames(typeof(Enumnum));

Ini mengembalikan a string[]dengan semua nama enum dari enum yang dipilih.


1
Mengembalikan nama dari nilai enum; OP tampaknya mengejar nilai itu sendiri.
Michael Petrotta


5

Anda mungkin ingin melakukan seperti ini:

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

Semua nilai int ini enumadalah 11,22,33,44.

Anda bisa mendapatkan nilai-nilai ini dengan ini:

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

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



2

dengan ini:

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

dan Anda dapat mengakses larik nilai seperti ini:

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

1
Enum.GetValues ​​tidak mengembalikan string []
messenger

1

Kamu bisa memakai

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

Ini mengembalikan sebuah array!


1

Jika Anda lebih suka cara yang lebih umum, ini dia. Anda dapat menambahkan lebih banyak konverter sesuai kebutuhan Anda.

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

    }

Penerapan Sampel:

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

0

juga bisa Anda gunakan

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

untuk mendapatkan semua elemen dalam enum sebagai format json.


0

OP meminta Bagaimana cara mendapatkan array dari semua enumnilai di C #?

Bagaimana jika Anda ingin mendapatkan array enumnilai yang dipilih di C #?

Enum Anda

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

Jika Anda ingin memilih Sundaydari file Enum.

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

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

Kredit diberikan ke tl berpengetahuan.

Referensi:

1.

2.

Harapan membantu seseorang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.