2010-06-15 2 views
7

스위치 케이스 C#에 둘 이상의 상수를 사용하려면 어떻게해야합니까? 개념적으로 나는 다음과 같은 것을 찾고 있습니다.C#의 스위치 케이스에 둘 이상의 상수를 사용하려면 어떻게해야합니까?

switch(n) 
{ 
    case 1,2,3:  //???? 
    case 4: 
    default: 
} 
+1

가능한 중복 [C#에서 전환 명령문을 통해?] (http://stackoverflow.com/questions/174155/sw itch-statement-in-c) –

+1

중복 된 http://stackoverflow.com/questions/174155/switch-statement-fallthrough-in-c –

답변

5

당신은 쓰루 쓰루를 사용하지 않습니다.

switch(n) 
{ 
    case x: 
    case y: 
    case z: 
     DoSomething(); 
     break; 
    case blah: 
     break; 
} 
+5

사례 본문이 비어 있으면 폴 스루가 허용됩니다. –

+1

예, 그렇습니다. 마지막 케이스에 코드가 없으면 넘어 질 수 있습니다. –

+0

아! 나는 교정했다. –

15
switch(n) 
{ 
    case 1: 
    case 2: 
    case 3: 
     // do something 
     break; 
    default: 
     break; 
} 
+2

+1 기본 분기 권장을 위함 –

3

이 시도 :

염두에
switch(n) 
{ 
    case 1: 
    case 2: 
    case 3: 
    //Do Stuff 
    break; 
    case 4: 
    //Do more stuff 
    break; 
    default: 
    //Do standard stuff 
    break; 
} 

유지에만 동작 답변의 수를 언급 한 case 1: 또는 case 2: blocks.i

+1

위에서 언급했듯이이 방법을 생각하는 것은 잘못된 방법입니다. case 1에 대한 빈 블록이 없습니다. 빈 블록과 다른 블록이 전혀 없습니다! 첫 번째 스위치 섹션 블록은 사례 3 이후에 시작되지 않습니다. –

34

에는 코드가없는 경우 그 사건이 비어 있다면 "넘어서 통과하는 것이 합법적이다."

정확하지 않습니다. 이것에 대해 생각하는 잘못된 방법입니다. 이것은 C#이 C 인 것처럼 추론합니다. C에서 모든 사례 레이블은 연관된 명령문 목록 (비어있을 수 있음)을 가지며 명령문 목록의 끝에서 제어가 '넘어집니다'. 이 중 어느 것도 C#의 경우입니다. C#으로

가 스위치 하나 경우 라벨 이상을 각각 갖는 섹션의 숫자로 구성되어 있으며 이들 각각은 하나 이상의 있다. 당신이

switch(x) 
{ 
    case 1: 
    case 2: 
     M(); 
     break; 
} 

을 말할 때 그것은 두 개의 스위치 부분, 사례 2의 경우 1 하나 하나가 있다는 것을 상황이 아니며, 경우 1의 스위치 부분은 비어 있고 두 번째 블록을 통해 떨어진다. 그것은 C에서 상황이 될 것이지만 C#은 C가 아닙니다.

이 예제에서는 하나의 스위치 섹션이 있습니다. 두 개의 레이블과 ONE 문 목록이 있습니다. 케이스 라벨 사이에는 빈 문장 목록이 없습니다. 명세서 목록 이 섹션의 마지막 레이블 다음에 나오기 때문에 그럴 수 없습니다. 그것을 반복하겠습니다. 빈 문장 목록이있는 것은 아닙니다. 명세서 목록이 전혀 없습니다. 빈 문장 목록이 없어도입니다.

이 특성화를 통해 "fall through is 항상 불법 인"이라는 마침표가 C#에서 명확하게 나타납니다. 다시, 제어가 사례 1의 빈 문장 목록에서 사례 2로 "넘어"지는 것은 아닙니다. 제어 결코이 넘어집니다. 컨트롤은 사례 1 이후 빈 문 목록에 절대로 입력하지 않으므로 컨트롤이 여기에 속하지 않습니다. 컨트롤은 빈 문 목록을 입력 할 수 없습니다. 왜냐하면 첫 번째 자리에 빈 문 목록이 없기 때문입니다.. 문 목록은 사례 2 이후까지 시작되지 않습니다.

C#은 에있는 모든 스위치 섹션의 무효화 규칙을 적용합니다. 이것은 스위치 섹션이 프로그램의 의미 론적 변화없이 기계 도구를 사용하여 임의로 다시 정렬 될 수 있도록하기위한 것입니다.

C#은 모든 스위치 섹션의 끝점에 도달 할 수 없도록 요구함으로써 no-fall-through 규칙을 적용합니다. 스위치 섹션이 중단되지 않아도됩니다.그것은 계속 던져, 또는 검출 무한 루프, 고토 휴식, 반환에 종료 할 수 있습니다

switch(x) 
{ 
    case 1: 
     while(true) M(); 
    case 2: 
     return 123; 
    case 3: 
     throw new Exception(); 
    case 4: 
     M(); 
     goto case 3; 
} 

위의 모든 법적이다; 휴식은 없습니다.

+1

처음에는 "C#은 폴스 스루를 지원하지 않지만 여러 사례 문을 허용합니다"및 "C#은 폴스 스루를 지원합니다. 빈 케이스 문과 함께 "는, 언뜻보기에는 동일합니다. 그러나 "C#은 빈 case 문에서만 폴스 - 스루 (fall-through)를 지원합니다"는 것은 빈 case 문이 합법적이라는 것을 의미합니다. 사실이 아닙니다 (마지막 case 문에 빈 case 문을 사용하는 경우에 해당). 나는 C#에서 오류가 발생했다는 것을 가정합니다 ("Control은 하나의 case 레이블 'case x :'에서 'another'로 넘어갈 수 없습니다.)). – Brian

+11

그것은 pedantic하지만 단지 * pedant하지 않습니다. –

+2

고맙습니다. –

7
C#에서 스위치 케이스를 위해 fallthrough하는

가장 가까운 것은 :

switch(n) 
{ 
    case 1: 
     // Do something 
     goto case 2; 
    case 2: 
     // Do something 
     goto case 3; 
    case 3: 
     // Do something 
    break; 
    default: 
    break; 
} 

대한 추가 정보를 원하시면 여기를 참조하십시오 :

http://msdn.microsoft.com/en-us/vcsharp/aa336815.aspx

+0

+1 (블록이없는 경우보다)이 경우에는 고전적인 전환과 유사하기 때문입니다. –

0

당신은 같은 것을 할 수 있습니다

switch(n) 
{ 
    case 1: case 2: case 3:  
     break; 
    case 4: 
     break; 
    default: 
     break; 
} 
관련 문제