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

C# Type.GetEnumValues() 메서드 완벽 정리: 열거형 상수 값 배열 반환하기

C#의 Type.GetEnumValues() 메서드는 현재 열거형(Enumeration) 타입에 정의된 모든 상수의 값을 담은 배열(Array)을 반환합니다. 이 메서드를 활용하면 특정 열거형이 가진 값들을 런타임에 동적으로 조회할 수 있습니다.

구문

기본 구문은 다음과 같습니다.

public virtual Array GetEnumValues ();

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

먼저 int 타입처럼 열거형이 아닌 타입에 GetEnumValues() 메서드를 호출했을 때 어떤 일이 발생하는지 살펴보겠습니다.

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() to return the constant name = " + str);
            Type type2 = type.GetEnumUnderlyingType();
            Console.Write("Enum Underlying type = "+type2);
            Array arrObj = type.GetEnumValues();
            Console.Write("Values = {0}"+arrObj);
            Console.WriteLine("\nListing constants..");
            for (int i = 0; i < str.Length; i++)
                Console.Write("{0} ", str[i]);
        }
        catch (ArgumentException e){
            Console.WriteLine("Not an enum!");
            Console.Write("{0}", e.GetType(), e.Message);
        }
    }
}

출력 결과

Not an enum!
System.ArgumentException

int 타입은 열거형이 아니므로 ArgumentException 예외가 발생하고, try-catch 블록의 catch 절에서 해당 예외가 정상적으로 처리되는 것을 확인할 수 있습니다. 즉, GetEnumValues()는 반드시 열거형 타입에만 사용해야 합니다.

예제 2: 실제 열거형에 적용한 경우

이번에는 Vehicle이라는 열거형 변수를 통해 타입 정보를 얻은 뒤, GetEnumValues() 메서드를 호출해 보겠습니다.

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("GetEnumName() to return the constant name = " + str);
            Type type2 = type.GetEnumUnderlyingType();
            Console.Write("Enum Underlying type = "+type2);
            Array arrObj = type.GetEnumValues();
            Console.Write("Values = "+arrObj);
            Console.WriteLine("\nListing constants..");
            for (int i = 0; i < str.Length; i++)
                Console.Write("{0} ", str[i]);
        }
        catch (ArgumentException e){
            Console.WriteLine("Not an enum!");
            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

핵심 정리

  • GetEnumValues()는 현재 열거형 타입의 상수 값들을 Array 형태로 반환합니다.
  • 대상 타입이 열거형이 아니면 ArgumentException 예외가 발생하므로, 필요하다면 예외 처리를 함께 구현하는 것이 좋습니다.
  • 함께 자주 사용되는 관련 메서드로는 상수 이름 목록을 반환하는 GetEnumNames()와 열거형의 기본 타입을 알려주는 GetEnumUnderlyingType()이 있습니다.