다음을 통해 공유


switch(C# 참조)

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

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 레이블은 상수 값을 지정합니다. switch 문은 case 레이블과 switch 식의 값(위의 예제에서 caseSwitch)이 일치하는 스위치 섹션으로 제어를 보냅니다. 일치하는 값이 들어 있는 case 레이블이 없는 경우 default 섹션(있는 경우)으로 제어를 보냅니다. default 섹션이 없으면 어떠한 작업도 수행되지 않으며 switch 문 외부로 제어를 보냅니다. 이전 예제에서는 case 1이 caseSwitch 값과 일치하기 때문에 첫 번째 스위치 섹션의 문이 실행됩니다.

switch 문에 포함할 수 있는 스위치 섹션의 수에는 제한이 없으며 각 섹션에는 하나 이상의 case 레이블을 포함할 수 있습니다(아래 예제의 문자열 case 레이블 참조). 하지만 두 case 레이블에 동일한 상수 값을 포함할 수는 없습니다.

선택한 스위치 섹션에서 문 목록의 실행은 첫 번째 문으로 시작하고 일반적으로 break, goto case, return 또는 throw 같은 점프문에 도달할 때까지 문 목록 전체를 진행합니다. 이 경우 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#의 경우 요구 사항에 따라 마지막 섹션을 포함한 스위치 섹션의 끝에 도달할 수 없어야 합니다. 즉, 다른 언어와 달리 코드에서 다음 스위치 섹션으로 진행하지 않습니다. 이 요구 사항은 대개 break 문을 사용하여 충족할 수 있지만, 문 목록의 끝에 도달할 수 없도록 보장한다는 점에서 다음 사례도 유효합니다.

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;
        }
    }
}

마지막 예제에서는 문자열 변수 str 및 문자열 case 레이블이 실행 흐름을 제어합니다.

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 cost = 0;

        // Notice the goto statements in cases 2 and 3. The base cost of 25 
        // cents is added to the additional cost for the medium and large sizes. 
        switch (str)
        {
            case "1":
            case "small":
                cost += 25;
                break;
            case "2":
            case "medium":
                cost += 25;
                goto case "1";
            case "3":
            case "large":
                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# 구문 및 사용법에 대한 신뢰할 수 있는 소스입니다.

참고 항목

참조

C# 키워드

switch 문 (C++)

if-else(C# 참조)

개념

C# 프로그래밍 가이드

기타 리소스

C# 참조