C#에서 문자열을 열거형으로 변환하는 방법

2024-07-27

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, dayString2dayString3 변수에는 "Monday", "SUNDAY" 및 "SUNDAY"라는 문자열이 각각 할당됩니다.
  • Enum.Parse 메서드는 dayString1dayString3 문자열을 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.ParseConvert.ChangeType 메서드는 대부분의 경우 문자열을 열거형 값으로 변환하는 가장 간편하고 직접적인 방법입니다.
  • 직접 변환, 사전 및 LINQ는 특정 상황에서 유용할 수 있는 대체 방법입니다.
  • 사용하는 방법은 개인의 선호와 상황에 따라 다릅니다.

c# string enums



C#에서 String과 string의 차이점

1. String 클래스String은 . NET Framework의 기본 문자열 클래스입니다. 문자열 데이터를 다루기 위한 다양한 메서드와 속성을 제공하며, 다음과 같은 특징을 가집니다.불변: String 객체는 생성 후 변경할 수 없습니다...


C#에서 "Flags" 특성을 가진 열거형의 의미

1. 플래그 열거형 정의:[Flags] 특성은 열거형이 플래그로 사용될 수 있음을 나타냅니다.각 멤버 값은 2의 제곱수(1, 2, 4, 8 ...)로 정의되어 비트 연산에 사용됩니다.None 멤버는 모든 비트가 꺼진 상태(0)를 나타냅니다...


C#의 숨겨진 기능들

다음은 C#의 숨겨진 기능 몇 가지와 간단한 예시입니다:1. 범위 변수 (Range Variables)범위 변수는 for 루프에서 반복 횟수를 간결하게 표현하는 데 사용할 수 있는 변수입니다. 예를 들어, 다음 코드는 1부터 10까지 반복하며 각 숫자를 출력합니다...


C#, .NET, LINQ를 사용한 DataTable 쿼리 프로그래밍

LINQ to DataSet을 사용하여 DataTable을 쿼리할 수 있습니다.AsEnumerable() 메서드 사용: DataTable을 IEnumerable<DataRow> 인터페이스를 구현하는 개체로 변환합니다...


C#에서 기본 생성자 호출에 대한 심층 설명

C#에서 기본 생성자 호출은 객체 지향 프로그래밍의 핵심 개념인 상속과 밀접한 관련이 있습니다. 상속을 통해 만들어진 자식 클래스는 부모 클래스의 특성을 물려받게 되는데, 이때 부모 클래스의 초기화를 위해 기본 생성자를 호출하는 것이 필수적입니다...



c# string enums

C#, .NET, DateTime을 이용한 나이 계산

해결 방법:DateTime 타입 변수 선언: 생일을 저장할 DateTime 타입 변수 birthday를 선언합니다. 예시: DateTime birthday = new DateTime(1990, 1, 1);DateTime 타입 변수 선언:


C#에서 상대 시간 계산

1. DateTime 구조체 사용DateTime 구조체는 날짜와 시간을 나타내는 데 사용됩니다. DateTime 객체에서 다른 DateTime 객체를 빼면 두 날짜/시간 사이의 차이를 나타내는 TimeSpan 객체를 얻을 수 있습니다


C#에서 사전을 값으로 정렬하는 방법

1. Linq 사용하기LINQ(Language Integrated Query)는 C#에 내장된 기능으로, 데이터 쿼리 및 변환을 쉽게 수행할 수 있도록 합니다. 사전을 값으로 정렬하려면 다음과 같은 코드를 사용할 수 있습니다


C#, .NET 및 성능과 관련된 Type에서 새 개체 인스턴스를 만드는 방법

1. new 키워드 사용:위 코드는 MyClass 형식의 새 인스턴스를 myObject 변수에 할당합니다. new 키워드는 메모리에 새 개체를 할당하고 해당 클래스의 생성자를 호출합니다.2. Activator 클래스 사용:


C# 반복문에서 break와 continue 사용법

break가장 가까운 바깥쪽 반복문 또는 switch 문을 종료합니다.종료된 문 다음에 오는 문으로 제어 흐름을 이동합니다 (있는 경우).예시:위 코드는 0부터 9까지 숫자를 출력하는 for 루프입니다. 하지만 i가 5가 되면 break 키워드를 만나 루프를 탈출하고 다음 문 (본 예시에서는 없음)으로 이동합니다