C#에서 문자열을 열거형으로 변환하는 방법
Enum.Parse 메서드 사용
Enum.Parse
메서드는 문자열 값을 열거형 값으로 변환하는 데 가장 일반적으로 사용되는 방법입니다. 이 메서드는 두 개의 매개 변수를 사용합니다.
enumType
: 변환하려는 열거형의 유형value
: 변환할 문자열 값
// DayOfWeek 열거형을 정의합니다.
enum DayOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
// 문자열을 DayOfWeek 열거형 값으로 변환합니다.
string dayString = "Monday";
DayOfWeek day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayString);
// 결과 출력
Console.WriteLine(day); // Monday
Enum.Parse
메서드를 사용할 때 주의해야 할 몇 가지 사항이 있습니다.
- 변환하려는 문자열이 열거형에 정의된 유효한 값인지 확인해야 합니다. 유효하지 않은 값을 전달하면
ArgumentException
예외가 발생합니다. Enum.Parse
메서드는 대/소문자를 구분합니다. 즉, "SUNDAY"와 "sunday"는 서로 다른 값으로 간주됩니다. 대/소문자를 구분하지 않고 변환하려면ignoreCase
매개 변수를true
로 설정할 수 있습니다.
// 대/소문자를 구분하지 않고 문자열을 DayOfWeek 열거형 값으로 변환합니다.
string dayString = "SUNDAY";
DayOfWeek day = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayString, true);
// 결과 출력
Console.WriteLine(day); // Monday
Convert.ChangeType 메서드 사용
Convert.ChangeType
메서드를 사용하여 문자열을 열거형 값으로 변환할 수도 있습니다. 하지만 이 방법은 Enum.Parse
메서드만큼 일반적으로 사용되지 않습니다.
// DayOfWeek 열거형을 정의합니다.
enum DayOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
// 문자열을 DayOfWeek 열거형 값으로 변환합니다.
string dayString = "Monday";
DayOfWeek day = (DayOfWeek)Convert.ChangeType(dayString, typeof(DayOfWeek));
// 결과 출력
Console.WriteLine(day); // Monday
- 변환하려는 문자열 값이 올바른 형식인지 확인해야 합니다. 형식이 올바르지 않으면
InvalidCastException
예외가 발생합니다. Convert.ChangeType
메서드는 대/소문자를 구분하지 않습니다. 즉, "SUNDAY"와 "sunday"는 동일한 값으로 간주됩니다.
느낀점
Enum.Parse
메서드는 문자열을 열거형 값으로 변환하는 데 가장 간편하고 일반적으로 사용되는 방법입니다.Enum.Parse
메서드를 사용할 때는 변환하려는 문자열이 열거형에 정의된 유효한 값인지 확인해야 합니다.
예제 코드: 문자열을 열거형으로 변환
// DayOfWeek 열거형을 정의합니다.
enum DayOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
// 문자열을 DayOfWeek 열거형 값으로 변환합니다. (Enum.Parse 사용)
string dayString1 = "Monday";
DayOfWeek day1 = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayString1);
Console.WriteLine(day1); // 결과: Monday
// 문자열을 DayOfWeek 열거형 값으로 변환합니다. (Convert.ChangeType 사용)
string dayString2 = "SUNDAY";
DayOfWeek day2 = (DayOfWeek)Convert.ChangeType(dayString2, typeof(DayOfWeek));
Console.WriteLine(day2); // 결과: Monday
// 대문자 문자열을 열거형 값으로 변환합니다. (Enum.Parse, 대/소문자 구분 무시)
string dayString3 = "SUNDAY";
DayOfWeek day3 = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), dayString3, true);
Console.WriteLine(day3); // 결과: Monday
이 코드에서:
dayString1
,dayString2
및dayString3
변수에는 "Monday", "SUNDAY" 및 "SUNDAY"라는 문자열이 각각 할당됩니다.Enum.Parse
메서드는dayString1
및dayString3
문자열을DayOfWeek
열거형 값으로 변환합니다.dayString3
의 경우ignoreCase
매개 변수를true
로 설정하여 대/소문자를 구분하지 않고 변환합니다.Convert.ChangeType
메서드는dayString2
문자열을DayOfWeek
열거형 값으로 변환합니다.
위 코드는 두 가지 메서드 모두 문자열을 성공적으로 열거형 값으로 변환하는 것을 보여줍니다. 사용하는 방법은 개인의 선호와 상황에 따라 다릅니다.
추가 예제
다음은 Enum.IsDefined
메서드를 사용하여 문자열 값이 유효한 열거형 값인지 확인하는 방법을 보여주는 예제 코드입니다.
// DayOfWeek 열거형을 정의합니다.
enum DayOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
// 문자열이 유효한 DayOfWeek 값인지 확인합니다.
string dayString = "Monday";
bool isValid = Enum.IsDefined(typeof(DayOfWeek), dayString);
Console.WriteLine(isValid); // 결과: True
// 문자열이 유효한 DayOfWeek 값이 아닌지 확인합니다.
string invalidDayString = "Polkadot";
bool isInvalid = Enum.IsDefined(typeof(DayOfWeek), invalidDayString);
Console.WriteLine(isInvalid); // 결과: False
isValid
변수에는dayString
문자열이DayOfWeek
열거형에 정의된 유효한 값인지 여부가 저장됩니다.
C#에서 문자열을 열거형으로 변환하는 대체 방법
직접 변환
일부 열거형의 경우 문자열 값을 직접 열거형 값으로 변환할 수 있습니다. 예를 들어 다음 코드는 DayOfWeek
열거형 값을 문자열 값으로 변환합니다.
// DayOfWeek 열거형을 정의합니다.
enum DayOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
// DayOfWeek 열거형 값을 문자열 값으로 변환합니다.
DayOfWeek day = DayOfWeek.Monday;
string dayString = day.ToString();
Console.WriteLine(dayString); // 결과: Monday
이 방법은 간단하지만 모든 열거형에 사용할 수 있는 것은 아닙니다. 열거형에 ToString
메서드가 정의되어 있지 않으면 이 방법을 사용할 수 없습니다.
사전 사용
문자열과 열거형 값을 매핑하는 사전을 만들 수 있습니다. 다음 코드는 문자열을 DayOfWeek
열거형 값으로 변환하는 사전을 만듭니다.
// DayOfWeek 열거형을 정의합니다.
enum DayOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
// 문자열과 DayOfWeek 값을 매핑하는 사전을 만듭니다.
Dictionary<string, DayOfWeek> dayMap = new Dictionary<string, DayOfWeek>()
{
{ "Sunday", DayOfWeek.Sunday },
{ "Monday", DayOfWeek.Monday },
{ "Tuesday", DayOfWeek.Tuesday },
{ "Wednesday", DayOfWeek.Wednesday },
{ "Thursday", DayOfWeek.Thursday },
{ "Friday", DayOfWeek.Friday },
{ "Saturday", DayOfWeek.Saturday }
};
// 문자열을 DayOfWeek 열거형 값으로 변환합니다.
string dayString = "Monday";
DayOfWeek day = dayMap[dayString];
Console.WriteLine(day); // 결과: Monday
이 방법은 유연하지만 사전을 만들고 유지 관리해야 하는 추가 작업이 필요합니다.
LINQ 사용
LINQ(Language Integrated Query)를 사용하여 문자열을 열거형 값으로 변환할 수 있습니다. 다음 코드는 DayOfWeek
열거형 값을 문자열 값으로 변환합니다.
// DayOfWeek 열거형을 정의합니다.
enum DayOfWeek
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
// DayOfWeek 열거형 값을 문자열 값으로 변환합니다.
string dayString = "Monday";
DayOfWeek day = Enum.Parse<DayOfWeek>(dayString);
Console.WriteLine(day); // 결과: Monday
이 방법은 간결하고 효율적이지만 LINQ에 대한 기본적인 이해가 필요합니다.
Enum.Parse
및Convert.ChangeType
메서드는 대부분의 경우 문자열을 열거형 값으로 변환하는 가장 간편하고 직접적인 방법입니다.- 직접 변환, 사전 및 LINQ는 특정 상황에서 유용할 수 있는 대체 방법입니다.
- 사용하는 방법은 개인의 선호와 상황에 따라 다릅니다.
c# string enums