C# string to enum 문자열을 열거형으로 변환하기

C#에서 문자열을 열거형으로 변환하는 방법에 대해 알아보도록 합시다.

MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), "value");

위의 코드는 다음의 과정을 수행할 것입니다~

  1. Enum.Parse 메서드: 이늄으로 파싱하기! 열거형의 이름이나 숫자 값을 동등한 열거형 객체로 변환하는 역할을 합니다.
  2. typeof(MyEnum): 대상 열거형의 유형을 지정합니다. 이번 예제에서는 MyEnum 이라고 임의로 설정할게요.
  3. "value": 변환하려는 열거형 값의 문자열 표현입니다.

string to enum

문자열을 열거형으로 변환하기 전에 열거형을 정의해야 합니다. 예를 들어 다음과 같이 말이지요.

public enum MyEnum
{
    None,
    Value1,
    Value2,
    Value3
}

그리고 문자열을 열거형으로 변환하기 위해 Enum.Parse 메서드를 사용해 보겠습니다. 이 메서드는 두 개의 매개변수를 받습니다: 첫 번째, '열거형의 유형', 그리고 두 번째, '변환할 문자열 값'입니다.

string enumString = "Value1";
MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), enumString);

참고로 파싱을 진행할 때 예외처리를 진행하지 않았는데요, 더욱 꼼꼼히 한다면, 다음처럼 보완을 할 수 있을 것입니다. (Enum.Parse 는 문자열이 어떤 열거형 값과도 일치하지 않으면 예외를 발생시킵니다.)

try
{
    MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), enumString);
}
catch (ArgumentException ae)
{
    //Argument Exception Handling
    //Console.WriteLine("잘못된 열거형 값입니다.");
}

Enum.TryParse 메서드 사용하기, 닷넷 버전에 따라 지원하는 메서드가 달라질 수 있으며, 필요 시 사용자 정의 함수 등으로 확장하는 것도 좋은 방법 중 하나일 거예요.

public enum MyEnum
{
    None,
    Value1,
    Value2,
    Value3
}

public class EnumExample
{
    public static void Main(string[] args)
    {
        try
        {
            string enumString = "Value1";
            MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), enumString);
        }
        catch (Exception ex)
        {
            //
        }        
    }
}

예외처리를 잘 해주세요. 다음과 같은 경우가 발생하지 않도록이요~

public enum MyEnum
{
    None,
    Value1,
    Value2,
    Value3
}

public class EnumExample
{
    public static void Main(string[] args)
    {
        try
        {
            string enumString = "No";
            MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), enumString);
        }
        catch (Exception ex)
        {
            //{System.ArgumentException: 요청한 값 'No'을(를) 찾을 수 없습니다.
            //위치: System.Enum.EnumResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument)
            //위치: System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult)
            //위치: System.Enum.Parse(Type enumType, String value, Boolean ignoreCase)
            //위치: System.Enum.Parse(Type enumType, String value)
            //위치: BeomSangForm.btn_Click(Object sender, EventArgs e) 파일 \BeomSangForm.cs:줄 1}
        }        
    }
}
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗