C # 'da tüm enum değerlerinin bir dizisi nasıl elde edilir?


91

Olası tüm değerleri görüntülemek istediğim bir numaram var. Böyle bir listeyi manuel olarak oluşturmak yerine, numaralamanın tüm olası değerlerinin bir dizisini veya listesini almanın bir yolu var mı? örneğin, bir numaram varsa:

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

nasıl bir almak mümkün olacaktır List<Enumnum>içerdiğini { TypeA, TypeB, TypeC, TypeD }?


Yanıtlar:


162

Bu, aşağıdakileri kullanarak size enum değerlerinin düz bir dizisini verir Enum.GetValues:

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

Ve bu size genel bir liste verir:

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

Teşekkürler, tam olarak aradığım şey!
Mark LeMoine

5
Bu her zaman neden var Enumnum.GetValues()olup Enumnum.GetNames()olmadığını merak etmeme neden oluyor .
dalle

8
Öğe türünün derleme zamanında bilindiği bir dizi değişkeni için kullanın var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));.
Jeppe Stig Nielsen

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

@ mr5: Örneğinizde ne ActualTypeanlama geliyor? Bir enum için, EnumnumOP'nin örneğinde olabilir veya temelde yatan tür olabilir (genellikle int). Aklınızda başka bir şey var mı?
Dirk Vollmar

16

Bu kodu deneyin:

Enum.GetNames(typeof(Enumnum));

Bu string[], seçilen numaralandırmanın tüm enum adlarıyla birlikte bir döndürür .


1
Enum değerlerinin adlarını döndürür ; OP, değerlerin kendisinin peşinde gibi görünüyor .
Michael Petrotta

6
Enum.GetValues(typeof(Enumnum));

Enum'daki değerlerin bir dizisini döndürür.


5

Bunu yapmak isteyebilirsiniz:

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

Bunların hepsi int değerleri enumolduğunu 11,22,33,44.

Bu değerleri şu şekilde elde edebilirsiniz:

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

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



2

Bununla:

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

ve değerler dizisine şu şekilde erişebilirsiniz:

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

1
Enum.GetValues ​​bir dize döndürmüyor []
messenger


1

Daha genel bir yol tercih ediyorsanız, işte burada. İhtiyacınıza göre daha fazla dönüştürücü ekleyebilirsiniz.

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

    }

Örnek Uygulamalar:

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

0

ayrıca kullanabilirsin

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

enum'daki tüm öğeleri json formatında almak için.


0

OP enum, C # 'da tüm değerlerin bir dizisi nasıl elde edilir ?

enumC # 'da seçilen değerlerin bir dizisini almak isterseniz ne olur ?

Numaranız

    enum WeekDays 
    {
        Sunday, 
        Monday,
        Tuesday
    }

Yalnızca Sundaykendi Enum.

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

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

Krediler bilgili tl'ye gider.

Referanslar:

1.

2.

Umut birine yardım eder.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.