스위치 케이스 C#에 둘 이상의 상수를 사용하려면 어떻게해야합니까? 개념적으로 나는 다음과 같은 것을 찾고 있습니다.C#의 스위치 케이스에 둘 이상의 상수를 사용하려면 어떻게해야합니까?
switch(n)
{
case 1,2,3: //????
case 4:
default:
}
스위치 케이스 C#에 둘 이상의 상수를 사용하려면 어떻게해야합니까? 개념적으로 나는 다음과 같은 것을 찾고 있습니다.C#의 스위치 케이스에 둘 이상의 상수를 사용하려면 어떻게해야합니까?
switch(n)
{
case 1,2,3: //????
case 4:
default:
}
당신은 쓰루 쓰루를 사용하지 않습니다.
switch(n)
{
case x:
case y:
case z:
DoSomething();
break;
case blah:
break;
}
사례 본문이 비어 있으면 폴 스루가 허용됩니다. –
예, 그렇습니다. 마지막 케이스에 코드가 없으면 넘어 질 수 있습니다. –
아! 나는 교정했다. –
switch(n)
{
case 1:
case 2:
case 3:
// do something
break;
default:
break;
}
+1 기본 분기 권장을 위함 –
이 시도 :
염두에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
위에서 언급했듯이이 방법을 생각하는 것은 잘못된 방법입니다. case 1에 대한 빈 블록이 없습니다. 빈 블록과 다른 블록이 전혀 없습니다! 첫 번째 스위치 섹션 블록은 사례 3 이후에 시작되지 않습니다. –
에는 코드가없는 경우 그 사건이 비어 있다면 "넘어서 통과하는 것이 합법적이다."
정확하지 않습니다. 이것에 대해 생각하는 잘못된 방법입니다. 이것은 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;
}
위의 모든 법적이다; 휴식은 없습니다.
처음에는 "C#은 폴스 스루를 지원하지 않지만 여러 사례 문을 허용합니다"및 "C#은 폴스 스루를 지원합니다. 빈 케이스 문과 함께 "는, 언뜻보기에는 동일합니다. 그러나 "C#은 빈 case 문에서만 폴스 - 스루 (fall-through)를 지원합니다"는 것은 빈 case 문이 합법적이라는 것을 의미합니다. 사실이 아닙니다 (마지막 case 문에 빈 case 문을 사용하는 경우에 해당). 나는 C#에서 오류가 발생했다는 것을 가정합니다 ("Control은 하나의 case 레이블 'case x :'에서 'another'로 넘어갈 수 없습니다.)). – Brian
그것은 pedantic하지만 단지 * pedant하지 않습니다. –
고맙습니다. –
가장 가까운 것은 :
switch(n)
{
case 1:
// Do something
goto case 2;
case 2:
// Do something
goto case 3;
case 3:
// Do something
break;
default:
break;
}
대한 추가 정보를 원하시면 여기를 참조하십시오 :
+1 (블록이없는 경우보다)이 경우에는 고전적인 전환과 유사하기 때문입니다. –
당신은 같은 것을 할 수 있습니다
switch(n)
{
case 1: case 2: case 3:
break;
case 4:
break;
default:
break;
}
가능한 중복 [C#에서 전환 명령문을 통해?] (http://stackoverflow.com/questions/174155/sw itch-statement-in-c) –
중복 된 http://stackoverflow.com/questions/174155/switch-statement-fallthrough-in-c –