IT

C # 스위치 명령문에서 변수 선언

lottoking 2020. 7. 25. 10:19
반응형

C # 스위치 명령문에서 변수 선언 [중복]


이 질문에는 이미 답변이 있습니다.

C # switch 문에서 여러 경우에 사용되는 변수에 대해 첫 번째 경우에만 선언하는 이유는 무엇입니까?

예를 들어 다음은 "variable"이라는 로컬 변수가 이미이 범위에 정의되어 있습니다. "라는 오류를 발생 수정했습니다.

switch (Type)
{
    case Type.A:
            string variable = "x";
                break;
    case Type.B:
            string variable = "y";
                break;
}

어떤 경우에는 논리에 따라 도착하지 않는 경우가 Type.B있습니다. switch 문 내의 모든 변수가 단일 범위에 존재하며 논리가 처리되기 전에 작성 / 할당?


변수의 전체 범위와 관련이있는 생각하며 스위치 수준에서 정의되는 블록 수준 범위입니다.

개인적으로 예제에서 스위치 내부에 값을 설정하여이를 확보하고 스위치 외부에서 값을 선언하고 싶을 것입니다.


특정 사례에 범위가 지정된 변수를 원하면 사례를 자체 블록으로 묶으십시오.

switch (Type)
{
    case Type.A:
    {
        string variable = "x";
        /* Do other stuff with variable */
    }
    break;

    case Type.B:
    {
        string variable = "y";
        /* Do other stuff with variable */
    }
    break;
}

예, 범위는 전체 스위치 블록입니다. 불행히도 IMO입니다. 그러나 단일 염기 서열은 항상 중괄호를 추가하여 더 작은 범위를 만들 수 있습니다. 옵션이 생성 / 할당 여부에 사용은-스택 프레임은 메소드의 모든 로컬 변수를위한 충분한 공간을 가지고 있습니다 (캡쳐 된 변수의 선택을 제외하고). 메소드 실행 중에 공간이 할당되는 것과 동일한 서비스입니다.


범위가 스위치 블록에 있기 때문입니다. C # 언어 사양은 다음을 말한다 :

스위치 블록에 선언 된 지역 변수 또는 상수의 범위는 블록입니다.


변수는 C # 컴파일러에서 범위를 공유합니다. 그러나 CIL 에서 범위가 동일한 방식으로 존재하지 않습니다 . 실제 생성 / 초기화 .... .NET 메모리 모델을 사용하면 변수가 인증서로 표시되지 않는 한 간단한 규칙을 따르는 한 컴파일러가 약간의 읽기 / 쓰기를 수행 할 수 있습니다 .


"내 Daaaaays에서 ..."

swicthC(이전까지도 C++) 그 자체로 오랜 세월이 지난 지금 까지도 매우 원시적 인 절차 적 구현입니다 .

전체 switch범위가 포함 블록 입니다 GOTO:(따라서 :각각에 있음 case). 어셈블러 수업을 들었다면 익숙해 질 것입니다.

이유는 switch함께 결합 할 때 사용이 가장 유용 Enums와 사용하지 않는 break하나 하나에 case같은

switch(mood)
{
    case Mood.BORED:
    case Mood.HAPPY:
        drink(oBeer) // will drink if bored OR happy
break;

    case Mood.SAD: // unnecessary but proofs a concept
    default:
        drink(oCoffee)
break;
}

경우에 초기화가 발생하지만 선언은 범위의 맨 위에서 효과적으로 수행됩니다. (의사 코드)

switch (Type)
{
string variable;

    case Type.A:
            variable = "x";
                break;
    case Type.B:
            variable = "y";
                break;
}

참고 URL : https://stackoverflow.com/questions/222601/variable-declaration-in-ac-sharp-switch-statement

반응형