TryParse() 메서드는 열거형 상수의 문자열 표현을 그에 대응하는 열거형 객체로 변환하는 데 사용됩니다. 일반적인 Parse() 메서드와 달리 변환에 실패해도 예외를 던지지 않고 false를 반환하기 때문에, 잘못된 입력을 안전하게 처리할 수 있다는 장점이 있습니다.
먼저 열거형(enum)을 정의해 보겠습니다.
enum Vehicle { Bus = 2, Truck = 4, Car = 10 };다음으로 문자열 배열을 선언하고 여러 값을 설정합니다.
string[] VehicleList = { "2", "3", "4", "bus", "Truck", "CAR" };이제 Enum.TryParse() 메서드를 사용하여 각 값을 파싱해 보겠습니다. 두 번째 매개변수로 true를 전달하면 대소문자를 구분하지 않고 비교할 수 있습니다.
예제
using System;
public class Demo {
enum Vehicle { Bus = 2, Truck = 4, Car = 10 };
public static void Main() {
string[] VehicleList = { "2", "3", "4", "bus", "Truck", "CAR" };
foreach (string val in VehicleList) {
Vehicle vehicle;
if (Enum.TryParse(val, true, out vehicle))
if (Enum.IsDefined(typeof(Vehicle), vehicle) | vehicle.ToString().Contains(","))
Console.WriteLine("Converted '{0}' to {1}", val, vehicle.ToString());
else
Console.WriteLine("{0} is not a value of the enum", val);
else
Console.WriteLine("{0} is not a member of the enum", val);
}
}
}출력 결과
Converted '2' to Bus 3 is not a value of the enum Converted '4' to Truck Converted 'bus' to Bus Converted 'Truck' to Truck Converted 'CAR' to Car
코드 설명
위 예제의 핵심 로직은 다음과 같습니다.
- Enum.TryParse(val, true, out vehicle) : 문자열을 열거형으로 변환을 시도합니다. 두 번째 인자가
true이므로 대소문자를 무시하며, 변환에 성공하면true를 반환합니다. - Enum.IsDefined(typeof(Vehicle), vehicle) : 변환된 값이 실제로 열거형에 정의된 값인지 검증합니다. 정의되지 않은 숫자 "3"은 이 단계에서 걸러집니다.
- vehicle.ToString().Contains(",") : 플래그(flag) 조합으로 인해 콤마가 포함된 결과도 유효한 값으로 처리합니다.
출력 결과에서 확인할 수 있듯이, 숫자 "2"와 "4"는 물론 이름 형태의 "bus", "Truck", "CAR"(대소문자 무시)도 모두 성공적으로 변환됩니다. 반면 열거형에 정의되어 있지 않은 "3"은 변환에 실패하여 적절한 메시지가 출력됩니다.