1. ホーム
  2. c#

C# Switch文の中括弧の有無...何が違うの?

2023-08-10 03:34:22

質問

C#では、常に switch() 文の間の case: ステートメントの間にあるのでしょうか?

javascriptプログラマがよくやるように、それらを省略するとどのような効果があるのでしょうか?

例を挙げます。

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 文の内部で宣言されたすべての変数は、すべてのケースブランチを通してその宣言のポイントから見えるということです。

Eric Lippertの例(投稿のケース3)も参照してください。

4つのスイッチの奇妙な点

エリックの例です。

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;
  }
}