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

C# 열거형(Enum) TryParse() 메서드 완벽 가이드

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"은 변환에 실패하여 적절한 메시지가 출력됩니다.