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

C# Type.GetEnumNames() 메서드 – 열거형 멤버 이름을 배열로 가져오기

C#의 Type.GetEnumNames() 메서드는 현재 열거형(Enumeration) 타입에 정의된 멤버들의 이름을 문자열 배열(string[]) 형태로 반환합니다. 리플렉션을 활용해 열거형 상수를 동적으로 조회해야 할 때 유용하게 사용되며, 만약 대상 타입이 열거형이 아니라면 ArgumentException 예외가 발생합니다.

구문

GetEnumNames() 메서드의 기본 구문은 다음과 같습니다.

public virtual string[] GetEnumNames();

예제 1: 열거형이 아닌 타입에 호출하는 경우

아래 예제에서는 string 타입에 대해 GetEnumNames()를 호출했기 때문에 예외가 발생하는 모습을 확인할 수 있습니다.

using System;
public class Demo {
    enum Vehicle {Car, Bus, Bike}
    public static void Main(){
        try {
            Type type = typeof(string);
            string[] str = type.GetEnumNames();
            Console.WriteLine("GetEnumName() to return the constant name = " + str);
            Console.WriteLine("Listing 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

string 타입은 열거형이 아니므로 ArgumentException이 발생하고, catch 블록에서 해당 예외를 처리한 것을 볼 수 있습니다.

예제 2: 실제 열거형에 호출하는 경우

이번에는 Vehicle이라는 열거형을 선언한 뒤, 해당 인스턴스의 타입 정보를 통해 GetEnumNames()를 호출해 보겠습니다.

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);
            Console.WriteLine("Listing 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[]
Listing constants ..
Car Bus Bike airplane

Vehicle 열거형에 정의된 네 개의 상수(Car, Bus, Bike, airplane) 이름이 순서대로 출력되었습니다. 참고로 GetEnumNames()는 각 멤버의 부호 없는 값(unsigned value) 크기순으로 이름을 정렬하여 반환하므로, 코드에서 선언한 순서와 다르게 정렬될 수도 있다는 점을 유의해야 합니다.