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) 크기순으로 이름을 정렬하여 반환하므로, 코드에서 선언한 순서와 다르게 정렬될 수도 있다는 점을 유의해야 합니다.