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

5
이 날은 항상 궁금 왜하게 Enumnum.GetValues()하고 Enumnum.GetNames()존재하지 않습니다.
dalle

8
요소 유형이 컴파일 타임에 알려진 배열 변수의 경우 var valuesAsArray = (Enumnum[])Enum.GetValues(typeof(Enumnum));.
Jeppe Stig Nielsen

또는Enum.GetValues(typeof(Enumnum)).Cast<ActualType>().ToList();
mr5

@ mr5 : 귀하의 예에서 무엇을 ActualType의미 해야 합니까? 열거 형 Enumnum의 경우 OP의 예제에 있거나 기본 유형 (일반적으로 int) 일 수 있습니다 . 다른 생각이 있으신가요?
Dirk Vollmar

16

이 코드를 시도하십시오.

Enum.GetNames(typeof(Enumnum));

string[]선택한 열거 형의 모든 열거 형 이름과 함께 a 를 반환합니다 .


1
열거 형 값의 이름 을 반환 합니다. OP는 가치 자체를 따르는 것 같습니다 .
Michael Petrotta

6
Enum.GetValues(typeof(Enumnum));

Enum의 값 배열을 반환합니다.


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

당신이 사용할 수있는

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

이것은 배열을 반환합니다!


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())) + "]";

enum의 모든 요소를 ​​json 형식으로 가져옵니다.


0

OP는 enumC #에서 모든 값 의 배열을 얻는 방법을 물었습니다 .

enumC #에서 선택한 값 의 배열을 얻으려면 어떻게해야 합니까?

귀하의 열거 형

    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.

2.

희망은 누군가를 돕습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.