C#에서 문자열을 열거형으로 변환하는 방법에 대해 알아보도록 합시다.
MyEnum myEnum = (MyEnum)Enum.Parse(typeof(MyEnum), "value");
위의 코드는 다음의 과정을 수행할 것입니다~
- Enum.Parse 메서드: 이늄으로 파싱하기! 열거형의 이름이나 숫자 값을 동등한 열거형 객체로 변환하는 역할을 합니다.
- typeof(MyEnum): 대상 열거형의 유형을 지정합니다. 이번 예제에서는 MyEnum 이라고 임의로 설정할게요.
- "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}
}
}
}