2012-10-11 6 views
3

가능한 중복 : (놀랍게도 컴파일하고 오류없이 실행) 변수 무언가 경우이 선언되지 않으며,이 스위치 문에서
C# switch variable initialization: Why does this code NOT cause a compiler error or a runtime error?switch 문에서이 변수를 선언하지 않고 어떻게 사용할 수 있습니까?

및 사례 1 결코 실행합니다. 어떻게 유효합니까? 어떻게 변수를 선언하지 않고 사용할 수 있습니까?

switch(2){ 
case 1: 
    string something = "whatever"; 
    break; 
case 2: 
    something = "where??"; 
    break; 
} 
+0

'뭔가'를 출력하면 콘솔에서 무엇을 말합니까? 사실 '어디에서?' '왜이 작동하는지'에 대해서는 : switch 문과 같은 '같은 블록'에 변수를 만들면 실제 코드에 도달했는지 여부에 관계없이 변수를 생성한다는 것만을 베팅 할 수 있습니다. – ATaylor

+0

@ATaylor - 아니요, '무언가'의 범위는 '스위치'로 제한됩니다. –

+2

이 질문의 대답을 확인하십시오 : [http://stackoverflow.com/questions/864153/c-sharp-switch-variable-initialization-why-does-this-code-not-cause-a- 컴파일러] [1] [1] : http://stackoverflow.com/questions/864153/c-sharp-switch-variable-initialization-why-does-this-code-not-cause-a -compiler –

답변

5

switch 문이 여러 사례에 걸쳐 적용되기 때문입니다. 따라서 switch 문을 원래 처리 할 때 something이라는 변수가 정의되며 기본값은 ...이 경우 null입니다.

그리고 더 정확하게는 IL이 생성 될 때 변수는 그 정의 또는 그 이하의 임의의 case의 범위에서 사용할 수 있습니다. 따라서 변수가 두 번째 case에서 선언 된 경우 첫 번째 case에서는 사용할 수 없지만 세 번째 case에서 사용할 수 있습니다.

+0

은 컴파일러에서 수행 한 것입니까? –

+0

@ TravisJ, 예. 나는 그것을 명확하게하기 위해 질문을 편집했다. –

+0

"스위치 내부에 정의 된 변수는 범위의 맨 위에 정의되어 있습니다." case 1 대신'something '이 선언 된 경우 오류가 발생합니다. –

관련 문제