Switch 케이스에서 추가 중괄호의 목적은 무엇입니까?
이 일에 대해 궁금합니다 ... 예를 참조하십시오.
switch(x)
{
case(a):
{
//do stuff
}
break;
case(b):
//do stuff
break;
}
내 평생 동안 케이스 b처럼 해왔지만 C #을 사용하면 사용할 수 있고 Visual Studio를 사용하면 해당 항목을 축소 할 수 있으므로 궁금합니다. 케이스 a (중괄호 포함)와 케이스 b의 실제 차이점은 무엇입니까? ?
중괄호 {}는 작업 집합의 범위를 정의하는 데 사용됩니다. 이상하게도 다음이 컴파일되고 작동합니다.
private void ConnectionStateChange(object sender, StateChangeEventArgs e)
{
string s = "hi";
switch(s)
{
case "hi":
{
int a = 1;
a++;
}
{
int a = 2;
a++;
}
break;
}
{
int a = 1;
a++;
}
{
int a = 2;
a++;
}
}
보시다시피이 한 가지 방법에서 각각 a라고하는 4 개의 변수를 만들었습니다. 지역 변수로서 자체 범위 내에서만 존재하기 때문에 각각은 완전히 별개입니다.
그게 말이 되나요?
중괄호 한 쌍의 (하지 브라켓 - []
-하지 괄호 - ()
-하지만 중괄호 {}
) 그들에 0 개 이상의 문으로는 C #에서 법적 문이며, 따라서 문이 법적으로 나타날 수 있음을 어디서든 나타날 수 있습니다.
다른 사람들이 지적했듯이 그렇게하는 일반적인 이유는 그러한 문이 새로운 지역 변수 선언 공간을 도입하고 그 안에 선언 된 지역 변수 의 범위 를 정의하기 때문입니다. (요소의 "범위"는 해당 요소가 정규화되지 않은 이름으로 참조 될 수있는 프로그램 텍스트의 영역입니다 .)
스위치의 범위 지정 규칙이 약간 이상하기 때문에 이것이 특히switch
성명 에서 흥미 롭다 는 점에 주목합니다 . 얼마나 이상한지에 대한 자세한 내용은 주제에 대한 내 기사의 "사례 3 :"를 참조하십시오.
http://ericlippert.com/2009/08/13/four-switch-oddities/
새 변수를 만들 수있는 새 범위를 만듭니다.
사용한 변수에 대한 새 범위를 만듭니다. 변수의 범위는 때때로 까다로울 수 있습니다. 예를 들어 귀하가 게시 한 코드에서;
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
i = 1; // Error: The name 'i' doesn't exist in the current context
break;
}
in case(b)
변수 a
가 범위를 벗어나 액세스 되므로 여기서 오류가 의미 가 있습니다. 이제 다른 한편으로
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
int i = 1; // Error: A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
break;
}
위의 두 오류는 서로 모순적으로 보입니다. 이 문제를 해결하려면 두 case 문에서 별도로 범위를 정의해야합니다.
switch(x)
{
case(a):
{
int i = 0;
}
break;
case(b):
{
int i = 1; // No error
}
break;
}
Eric Lippert shared a very good link to his blog to explain variable scopes in case statement. You should have a look at it.
ReferenceURL : https://stackoverflow.com/questions/10095280/what-is-the-purpose-of-the-extra-braces-in-switch-case
'Program Tip' 카테고리의 다른 글
OS X에서 명령 줄을 통해 활성 사용자의 이름을 어떻게 얻습니까? (0) | 2020.12.26 |
---|---|
foreach 루프에서 반복 횟수 계산 (0) | 2020.12.26 |
연락처 목록 Android에서 이메일 주소 만 가져 오기 (0) | 2020.12.26 |
jquery 데이터 테이블의 "10 개 항목 표시"선택 상자 값 변경 (0) | 2020.12.26 |
설치된 Perl 모듈의 버전을 어떻게 찾을 수 있습니까? (0) | 2020.12.26 |