Selection 문 - if, if-else및 switch

, if및 if-else 문은 switch식 값에 따라 가능한 여러 경로에서 실행할 문을 선택합니다. 이 문은if 제공된 부울 식이 .로 계산되는 경우에만 문을 실행합니다true. 이if-else 문을 사용하면 부울 식을 기반으로 수행할 두 코드 경로 중 하나를 선택할 수 있습니다. 문은 switch 식과 패턴 일치를 기반으로 실행할 문 목록을 선택합니다.

C# 언어 참조는 가장 최근에 릴리스된 C# 언어 버전을 문서화합니다. 또한 예정된 언어 릴리스의 공개 미리 보기 기능에 대한 초기 설명서도 포함되어 있습니다.

설명서는 언어의 마지막 세 버전 또는 현재 공개 미리 보기에서 처음 도입된 기능을 식별합니다.

팁 (조언)

C#에서 기능이 처음 도입된 시기를 찾으려면 C# 언어 버전 기록에 대한 문서를 참조하세요.

if 선언문

문은 if 다음 두 가지 형식 중 어느 것일 수 있습니다.

  • 다음 예제와 같이 파트가 있는 if 문은 else 부울 식의 값에 따라 실행할 두 문 중 하나를 선택합니다.

    DisplayWeatherReport(15.0);  // Output: Cold.
    DisplayWeatherReport(24.0);  // Output: Perfect!
    
    void DisplayWeatherReport(double tempInCelsius)
    {
        if (tempInCelsius < 20.0)
        {
            Console.WriteLine("Cold.");
        }
        else
        {
            Console.WriteLine("Perfect!");
        }
    }
    
  • 파트가 if 없는 문은 else 다음 예제와 같이 부울 식이 계산되는 true경우에만 본문을 실행합니다.

    DisplayMeasurement(45);  // Output: The measurement value is 45
    DisplayMeasurement(-3);  // Output: Warning: not acceptable value! The measurement value is -3
    
    void DisplayMeasurement(double value)
    {
        if (value < 0 || value > 100)
        {
            Console.Write("Warning: not acceptable value! ");
        }
    
        Console.WriteLine($"The measurement value is {value}");
    }
    

다음 예제와 같이 문을 중첩 if 하여 여러 조건을 확인할 수 있습니다.

DisplayCharacter('f');  // Output: A lowercase letter: f
DisplayCharacter('R');  // Output: An uppercase letter: R
DisplayCharacter('8');  // Output: A digit: 8
DisplayCharacter(',');  // Output: Not alphanumeric character: ,

void DisplayCharacter(char ch)
{
    if (char.IsUpper(ch))
    {
        Console.WriteLine($"An uppercase letter: {ch}");
    }
    else if (char.IsLower(ch))
    {
        Console.WriteLine($"A lowercase letter: {ch}");
    }
    else if (char.IsDigit(ch))
    {
        Console.WriteLine($"A digit: {ch}");
    }
    else
    {
        Console.WriteLine($"Not alphanumeric character: {ch}");
    }
}

식 컨텍스트에서 조건부 연산 ?: 자를 사용하여 부울 식의 값을 기반으로 두 식 중 하나를 평가합니다.

switch 선언문

이 문은 switch 다음 예제와 같이 일치 식과 패턴 일치를 기반으로 실행할 일련의 문을 선택합니다.

DisplayMeasurement(-4);  // Output: Measured value is -4; too low.
DisplayMeasurement(5);  // Output: Measured value is 5.
DisplayMeasurement(30);  // Output: Measured value is 30; too high.
DisplayMeasurement(double.NaN);  // Output: Failed measurement.

void DisplayMeasurement(double measurement)
{
    switch (measurement)
    {
        case < 0.0:
            Console.WriteLine($"Measured value is {measurement}; too low.");
            break;

        case > 15.0:
            Console.WriteLine($"Measured value is {measurement}; too high.");
            break;

        case double.NaN:
            Console.WriteLine("Failed measurement.");
            break;

        default:
            Console.WriteLine($"Measured value is {measurement}.");
            break;
    }
}

앞의 예제에서 문은 switch 다음 패턴을 사용합니다.

중요합니다

문에서 지원하는 switch 패턴에 대한 자세한 내용은 패턴을 참조하세요.

앞의 예제에서는 사례도 보여 줍니다 default . 이 사례는 default 일치 식이 다른 사례 패턴과 일치하지 않을 때 실행할 문을 지정합니다. 일치 식이 사례 패턴과 일치하지 않고 대/소문자를 구분하지 않는 default 경우 컨트롤은 switch 문을 통과합니다.

문은 switch 첫 번째 switch 섹션에서대/소문자 패턴이 일치 식과 일치하고 케이스 가드(있는 경우)가 계산되는 문 목록을 실행합니다true. 문은 switch 위에서 아래로 텍스트 순서로 대/소문자 패턴을 평가합니다. 컴파일러는 문에 연결할 수 없는 대/소문자가 포함된 경우 switch 오류를 생성합니다. 이 오류는 대문자에서 이미 대문자를 처리하거나 패턴을 일치시킬 수 없는 경우에 발생합니다.

비고

케이스는 default 문 내 switch 의 모든 위치에 나타날 수 있습니다. 해당 위치에 default 관계없이 다른 모든 사례 패턴이 일치하지 goto default; 않거나 스위치 섹션 중 하나에서 문이 실행되는 경우에만 케이스가 평가됩니다.

다음 예제와 같이 문의 한 섹션 switch 에 대해 여러 대/소문자 패턴을 지정할 수 있습니다.

DisplayMeasurement(-4);  // Output: Measured value is -4; out of an acceptable range.
DisplayMeasurement(50);  // Output: Measured value is 50.
DisplayMeasurement(132);  // Output: Measured value is 132; out of an acceptable range.

void DisplayMeasurement(int measurement)
{
    switch (measurement)
    {
        case < 0:
        case > 100:
            Console.WriteLine($"Measured value is {measurement}; out of an acceptable range.");
            break;
        
        default:
            Console.WriteLine($"Measured value is {measurement}.");
            break;
    }
}

문 내에서 switch 컨트롤은 한 스위치 섹션에서 다음 섹션으로 넘어갈 수 없습니다. 이 섹션의 예제에서 볼 수 있듯이 일반적으로 각 스위치 섹션의 끝에 있는 문을 사용하여 break 문에서 제어를 switch 전달합니다. 반환 및 throw 문을 사용하여 문에서 switch 제어를 전달할 수도 있습니다. 대체 동작을 모방하고 컨트롤을 다른 스위치 섹션으로 전달하려면 이goto 문을 사용할 수 있습니다.

중요합니다

모든 스위치 섹션은 , break또는 goto.로 return끝나야 합니다. 한 스위치 섹션에서 다음 스위치 섹션으로 넘어가면 컴파일러 오류가 발생합니다. 그러나 이전 예제와 같이 case < 0: 동일한 스위치 섹션에 여러 스위치 레이블을 적용할 수 있습니다. 이러한 의도적인 디자인 선택을 통해 동일하거나 상호 종속적인 논리를 공유하는 여러 사례를 간결하게 처리할 수 있습니다.

식 컨텍스트에서 식을 사용하여 switch 식과 패턴 일치를 기반으로 후보 식 목록에서 단일 식을 평가할 수 있습니다.

중요합니다

switch 식과 switch 문 간의 차이점:

  • switch 문 은 코드 블록 내에서 실행 흐름을 제어하는 데 사용됩니다.
  • switch 식 은 일반적으로 값 반환 및 값 할당의 컨텍스트에서 사용되며, 종종 식 본문 멤버로 사용됩니다.
  • switch 식 대/소문자 섹션은 비워 둘 수 없지만 switch 문 사례 섹션은 비워 둘 수 있습니다.

케이스 가드

대/소문자 패턴이 스위치 섹션의 실행 조건을 지정하기에 충분하지 않을 수 있습니다. 이러한 경우 케이스 가드를 사용합니다. 조건은 일치하는 패턴과 함께 충족되어야 합니다. 대/소문자 보호는 부울 식이어야 합니다. 다음 예제와 같이 패턴을 따르는 키워드 뒤에 when 대/소문자 보호기를 지정합니다.

DisplayMeasurements(3, 4);  // Output: First measurement is 3, second measurement is 4.
DisplayMeasurements(5, 5);  // Output: Both measurements are valid and equal to 5.

void DisplayMeasurements(int a, int b)
{
    switch ((a, b))
    {
        case (> 0, > 0) when a == b:
            Console.WriteLine($"Both measurements are valid and equal to {a}.");
            break;

        case (> 0, > 0):
            Console.WriteLine($"First measurement is {a}, second measurement is {b}.");
            break;

        default:
            Console.WriteLine("One or both measurements are not valid.");
            break;
    }
}

앞의 예제에서는 중첩된 관계형 패턴이 있는 위치 패턴을 사용합니다.

C# 언어 사양

자세한 내용은 C# 언어 사양의 다음 섹션을 참조하세요.

패턴에 대한 자세한 내용은 C# 언어 사양의 패턴 및 패턴 일치 섹션을 참조하세요.

참고하십시오