다음을 통해 공유


Selection 문 - if, if-elseswitch

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

if 선언문

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

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

    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!");
        }
    }
    
  • 파트가 else 없는 문은 if 다음 예제와 같이 부울 식이 계산되는 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 문을 사용할 수 있습니다.

중요합니다

모든 스위치 섹션은 또는 gotoreturn.로 break끝나야 합니다. 한 스위치 섹션에서 다음 스위치 섹션으로 넘어가면 컴파일러 오류가 발생합니다. 그러나 위의 예제와 같이 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# 언어 사양패턴 및 패턴 일치 섹션을 참조하세요.

참고하십시오