switch(C# 참조)

업데이트: 2010년 9월

switch 문은 스위치 섹션을 선택하여 후보 목록에서 실행하는 제어문입니다.

각 스위치 섹션에는 하나 이상의 case 레이블 및 하나 이상의 문 목록이 있습니다. 다음 예제에서는 세 가지 스위치 섹션이 있는 간단한 switch 문을 보여 줍니다. 각 스위치 섹션에는 case 1와 같은 하나의 case 레이블과 두 개의 문 목록이 있습니다.

예제

int caseSwitch = 1;
switch (caseSwitch)
{
    case 1:
        Console.WriteLine("Case 1");
        break;
    case 2:
        Console.WriteLine("Case 2");
        break;
    default:
        Console.WriteLine("Default case");
        break;
}

각 case 레이블의 상수 값을 지정합니다. 컨트롤은 case 레이블이 switch 식, caseSwitch의 값과 일치하는 상수 값을 포함하는 switch 구역으로 전송됩니다. 일치하는 값이 들어 있는 case 레이블이 없는 경우 컨트롤은 default 섹션으로 전송됩니다(있는 경우). default 섹션이 없으면 어떠한 작업도 수행되지 않으며 컨트롤이 switch 문 외부로 전송됩니다. 이전 예제에서 첫 번째 스위치 섹션에 있는 문은 케이스 레이블 case 1에서 값 1을 지정하고 caseSwitch 값 또한 1이므로 첫 번째 스위치 섹션의 문이 실행됩니다.

switch 문은 많은 스위치 구역을 포함할 수 있으며 각 구역은 하나 이상의 case 레이블을 가질 수 있습니다. 그러나, 두 case 레이블은 동일한 상수 값을 포함할 수 있습니다.

선택한 섹션에서 문 목록의 실행은 첫 번째 문으로 시작하고 일반적으로 break, goto case, return 또는 throw 같은 jump 문에 도달할 때까지 문 목록 전체를 진행합니다. 이 경우 switch 문 또는 다른 case 레이블 외부로 전송됩니다.

C++와 달리 C#은 한 스위치 섹션에서 다른 스위치 섹션으로 실행을 계속하는 것을 허용하지 않습니다. 다음 코드는 이 오류를 발생시킵니다.

switch (caseSwitch)
{
    // The following switch section causes an error.
    case 1:
        Console.WriteLine("Case 1...");
        // Add a break or other jump statement here.
    case 2:
        Console.WriteLine("... and/or Case 2");
        break;
}

C#의 요구 사항은 최종 한 개를 포함하여 모든 스위치 섹션의 끝이 연결할 수 없는 것입니다. 이 요구 사항은 대개 jump 문을 사용하여 충족되지만 문 목록에 도달할 수 없기 때문에 다음 사례도 유효합니다.

case 4:
    while (true)
        Console.WriteLine("Endless looping. . . .");

다음 예제는 switch 문의 요구 사항과 기능을 보여 줍니다.

class Program
{
    static void Main(string[] args)
    {
        int switchExpression = 3;
        switch (switchExpression)
        {
            // A switch section can have more than one case label.
            case 0:
            case 1:
                Console.WriteLine("Case 0 or 1");
                // Most switch sections contain a jump statement, such as
                // a break, goto, or return. The end of the statement list
                // must be unreachable.
                break;
            case 2:
                Console.WriteLine("Case 2");
                break;
                // The following line causes a warning.
                Console.WriteLine("Unreachable code");
            // 7 - 4 in the following line evaluates to 3.
            case 7 - 4:
                Console.WriteLine("Case 3");
                break;
            // If the value of switchExpression is not 0, 1, 2, or 3, the
            // default case is executed.
            default:
                Console.WriteLine("Default case (optional)");
                // You cannot "fall through" any switch section, including
                // the last one.
                break;
        }
    }
}

마지막 예제에서 문자열 입력은 switch 식에 사용되는 정수 변수인 switchExp로 변환됩니다. 또한 문자열 변수 str을 직접 사용할 수도 있습니다. 이렇게 하려면 다음 코드에 표시된 대로 case 레이블을 변경하여 문자열 값을 지정합니다.

switch(str)
{
    case "1":
        // ...
    case "2":
        // ...
}
class SwitchTest
{
    static void Main()
    {
        Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large");
        Console.Write("Please enter your selection: ");
        string str = Console.ReadLine();
        int switchExp = int.Parse(str);
        int cost = 0;
        switch (switchExp)
        {
            case 1:
                cost += 25;
                break;
            case 2:
                cost += 25;
                goto case 1;
            case 3:
                cost += 50;
                goto case 1;
            default:
                Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
                break;
        }
        if (cost != 0)
        {
            Console.WriteLine("Please insert {0} cents.", cost);
        }
        Console.WriteLine("Thank you for your business.");
    }
}
/*
    Sample Input: 2

    Sample Output:
    Coffee sizes: 1=Small 2=Medium 3=Large
    Please enter your selection: 2
    Please insert 50 cents.
    Thank you for your business.
*/

C# 언어 사양

자세한 내용은 C# 언어 사양을 참조하십시오. 이 언어 사양은 C# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.

참고 항목

참조

C# 키워드

switch Statement (C++)

if-else(C# 참조)

개념

C# 프로그래밍 가이드

기타 리소스

C# 참조

변경 기록

날짜

변경 내용

이유

2010년 9월

스위치 섹션을 끝낼 수 있는 점프문 목록에 "Throw"를 추가했습니다.

고객 의견