본문 바로가기
C#

C# CS0227 오류 설명 및 해결 방법

by 공부봇 2024. 12. 30.
반응형

C#에서 CS0227 오류는 "스위치 문의 식이 값이 아니거나 조건식이 아닌 형식"이라는 오류 메시지로, 주로 switch 문에서 발생합니다. 이 오류는 switch 문에서 사용된 표현식이 유효한 값이 아니거나, 조건으로 사용할 수 없는 타입일 때 발생합니다.

오류 원인

CS0227 오류는 switch 문에 사용되는 표현식이 컴파일러가 처리할 수 있는 형식이 아닐 때 발생합니다. switch 문은 기본적으로 정수형 값(예: int, enum), 문자형 값(예: char), 문자열(예: string), 또는 bool 타입과 같은 몇 가지 특정한 타입만 허용합니다. 만약 switch 문에서 이러한 타입이 아닌 값을 사용하면 CS0227 오류가 발생합니다.

예시 코드 (오류 발생)

string value = "Hello";
switch (value)
{
    case 1: // Error CS0227 발생
        Console.WriteLine("Case 1");
        break;
    default:
        Console.WriteLine("Default case");
        break;
}

위 코드에서 switch 문에 value는 string 타입이고, case 문은 숫자 1을 비교하는데, 문자열과 숫자는 타입이 달라서 CS0227 오류가 발생합니다.

해결 방법

  1. 조건식의 타입을 올바르게 맞추기
    switch 문에서 비교할 값의 타입을 제대로 설정해야 합니다. 예를 들어, string 타입을 비교하려면 case 문에서 문자열을 사용해야 합니다.
  2. string value = "Hello"; switch (value) { case "Hello": Console.WriteLine("Hello case"); break; default: Console.WriteLine("Default case"); break; }
  3. 타입 일치 확인
    switch 문의 조건식에 사용하는 값과 case 문에 사용하는 값의 타입이 일치해야 합니다. switch 문에서 사용하는 값은 정수, 문자, 문자열, 열거형 타입이지만, 객체나 복잡한 타입을 사용할 수 없습니다.
  4. enum Days { Monday, Tuesday, Wednesday } Days day = Days.Monday; switch (day) { case Days.Monday: Console.WriteLine("It's Monday"); break; default: Console.WriteLine("Other day"); break; }
  5. 객체 비교가 필요한 경우 if-else 사용
    만약 switch 문에서 비교하려는 값이 객체나 복잡한 타입이라면, switch 문 대신 if-else 문을 사용하는 것이 좋습니다.
  6. object value = GetSomeObject(); if (value is SomeClass obj) { // 객체에 대한 처리를 if-else로 진행 }

이와 같이, switch 문에 올바른 타입을 사용하고 조건식을 조정하는 방법으로 CS0227 오류를 해결할 수 있습니다.

반응형