Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 GetEnumValues()로 열거형의 상수 값 배열 가져오는 방법

C#에서 현재 열거형(Enumeration) 타입이 가진 모든 상수 값들을 배열 형태로 가져오려면 Type 클래스가 제공하는 GetEnumValues() 메서드를 사용하면 됩니다. 이 메서드는 해당 열거형에 정의된 상수 값들을 Array 객체로 반환합니다.

아래 예제를 통해 실제 동작 방식을 살펴보겠습니다.

예제 1: 열거형이 아닌 타입을 사용한 경우

using System;
public class Demo {
    enum Vehicle {Car, Bus, Bike, Airplane}
    public static void Main() {
        try {
            Type type = typeof(int);
            string[] str = type.GetEnumNames();
            Console.WriteLine("GetEnumNames() 반환되는 상수 이름 = " + str);
            Type type2 = type.GetEnumUnderlyingType();
            Console.Write("열거형 기본 타입 = "+type2);
            Array arrObj = type.GetEnumValues();
            Console.Write("값 = {0}"+arrObj);
            Console.WriteLine("\n상수 목록 출력 ..");
            for (int i = 0; i < str.Length; i++)
                Console.Write("{0} ", str[i]);
        }
        catch (ArgumentException e) {
            Console.WriteLine("열거형이 아닙니다!");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Not an enum!
System.ArgumentException

이 예제에서는 typeof(int)를 사용했기 때문에 int는 열거형 타입이 아니므로 ArgumentException 예외가 발생합니다. 따라서 catch 블록의 "Not an enum!" 메시지가 출력됩니다.

예제 2: 실제 열거형 타입을 사용한 경우

이번에는 정상적인 열거형 변수를 사용해 보겠습니다.

using System;
public class Demo {
    enum Vehicle {Car, Bus, Bike, Airplane}
    public static void Main() {
        try {
            Vehicle v = Vehicle.Bike;
            Type type = v.GetType();
            string[] str = type.GetEnumNames();
            Console.WriteLine("GetEnumNames() 반환되는 상수 이름 = " + str);
            Type type2 = type.GetEnumUnderlyingType();
            Console.Write("열거형 기본 타입 = "+type2);
            Array arrObj = type.GetEnumValues();
            Console.Write("값 = "+arrObj);
            Console.WriteLine("\n상수 목록 출력 ..");
            for (int i = 0; i < str.Length; i++)
                Console.Write("{0} ", str[i]);
        }
        catch (ArgumentException e) {
            Console.WriteLine("열거형이 아닙니다!");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

GetEnumName() to return the constant name = System.String[]
Enum Underlying type = System.Int32Values = Demo+Vehicle[]
Listing constants ..
Car Bus Bike Airplane

주요 메서드 정리

  • GetEnumNames(): 열거형에 정의된 상수들의 이름을 문자열 배열(string[])로 반환합니다.
  • GetEnumUnderlyingType(): 열거형 멤버 값의 기본 데이터 타입(여기서는 System.Int32)을 반환합니다.
  • GetEnumValues(): 열거형에 정의된 모든 상수 값을 배열(Array) 형태로 반환합니다.

이처럼 Type 클래스의 열거형 관련 메서드들을 활용하면 런타임에 열거형의 구조와 값을 손쉽게 조회할 수 있습니다. 단, 대상 타입이 반드시 열거형이어야 하며, 그렇지 않은 경우 ArgumentException 예외가 발생하므로 try-catch 블록으로 처리하는 것이 안전합니다.