Programing

중괄호가 있거나없는 C # Switch 문… 차이점은 무엇입니까?

lottogame 2020. 11. 8. 09:10
반응형

중괄호가 있거나없는 C # Switch 문… 차이점은 무엇입니까?


C #은 항상 switch()문 사이의 case:내에서 중괄호를 생략하도록 허용 했습니까?

자바 스크립트 프로그래머가 자주하는 것처럼 생략하면 어떤 효과가 있습니까?

예:

switch(x)
{
  case OneWay:
  {                               //  <---- Omit this entire line
    int y = 123;
    FindYou(ref y);
    break;
  }                               //  <---- Omit this entire line
  case TheOther:
  {                               //  <---- Omit this entire line
    double y = 456.7; // legal!
    GetchaGetcha(ref y);
    break;
  }                               //  <---- Omit this entire line
}

중괄호는 필수는 아니지만 새 선언 공간 을 도입하는 데 유용 할 수 있습니다 . 이 동작은 내가 아는 한 C # 1.0 이후로 변경되지 않았습니다.

이를 생략하면 switch명령문 내부 어딘가에 선언 된 모든 변수가 모든 case 분기의 선언 지점에서 볼 수 있습니다.

Eric Lippert의 예 (포스트의 사례 3)도 참조하세요.

네 가지 스위치 이상

에릭의 예 :

switch(x)
{
  case OneWay:
    int y = 123;
    FindYou(ref y);
    break;
  case TheOther:
    double y = 456.7; // illegal!
    GetchaGetcha(ref y);
    break;
}

이것은 컴파일하기 때문에하지 않는 int ydouble y에 의해 도입 같은 선언 공간에있는 switch문. 중괄호를 사용하여 선언 공간을 분리하여 오류를 수정할 수 있습니다.

switch(x)
{
  case OneWay:
  {
    int y = 123;
    FindYou(ref y);
    break;
  }
  case TheOther:
  {
    double y = 456.7; // legal!
    GetchaGetcha(ref y);
    break;
  }
}

중괄호는 스위치 블록 의 선택적 부분이며 스위치 섹션의 일부가 아닙니다. 중괄호는 스위치 섹션 내에 삽입하거나 코드의 범위를 제어하기 위해 어디에나 동일하게 삽입 할 수 있습니다.

스위치 블록 내에서 범위를 제한하는 데 유용 할 수 있습니다. 예를 들면 :

int x = 5;

switch(x)
{
case 4:
    int y = 3;
    break;
case 5:
    y = 4;
    //...                      
    break;
}

대 ...

int x = 5;

switch(x)
{
  case 4:
  {
    int y = 3;
    break;
  }
  case 5:
  {
    y = 4;//compiling error
    //...                      
    break;
  }
}

참고 : C #에서는 사용하기 전에 첫 번째 예제에서 case 5 블록 내에서 값을 y로 설정해야합니다. 이것은 우발적 인 변수 추종에 대한 보호입니다.


스위치 내부의 중괄호는 실제로 스위치 구조의 일부가 아닙니다. 그것들은 단지 스코프 블록 일 뿐이며 원하는 곳 어디에서나 코드에 적용 할 수 있습니다.

The difference between having them and not having them is that each block has it's own scope. You can declare local variables inside the scope, that doesn't conflict with other variables in another scope.

Example:

int x = 42;
{
  int y = x;
}
{
  int y = x + 1; // legal, as it's in a separate scope
}

They are not strictly necessary but as soon as you start declaring local variables (in the switch branches) they are very much recommended.

This won't work:

    // does not compile
    switch (x)
    {
        case 1 :               
            int j = 1;
            ...
            break;

        case 3:
            int j = 3;   // error
            ...
            break;
    }

This compiles but it's spooky:

    switch (x)
    {
        case 1 :               
            int j = 1;
            ...
            break;

        case 3:
            j = 3;
            ...
            break;
    }

So this is best:

  switch (x)
    {
        case 1 : 
         {             
            int j = 1;
            ...
         }
         break;  // I prefer the break outside of the  { }

        case 3: 
         {
            int j = 3;
            ...
         }
         break;
    }

Just keep it simple and readable. You don't want to require readers to have a detailed knowledge of the rules involved in the middle example.

참고URL : https://stackoverflow.com/questions/3652408/c-sharp-switch-statement-with-without-curly-brackets-whats-the-difference

반응형