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 |