64

C# がこれを許可する理由:

var s = "Nice";
switch (s)
{
    case "HI":
        break;
    const string x = "Nice";
    case x:
        Console.Write("Y");
        break;
}

しかし、これではありませ:

var s = "Nice";
switch (s)
{
    const string x = "Nice";
    case x:
        Console.Write("Y");
        break;
}
4

3 に答える 3

7

言語仕様では、スイッチで const を直接使用することは許可されていないため (case と default のみが許可されます):

switch (expression)
{
   case constant-expression:
      statement
      jump-statement
   [default:
      statement
      jump-statement]
}

どこ:

expression:整数型または文字列型の式。
statement:制御がケースまたはデフォルトに転送された場合に実行される埋め込みステートメント。
jump-statement:ケース本体から制御を移すジャンプ文。
constant-expression:この式の値に応じて、特定のケースに制御が移ります。

最初のケースでは、const はケース ロジックの一部です。const will は、実行時ではなくコンパイル時に書き換えられるため、機能するだけです。

于 2013-05-22T14:20:18.327 に答える
1

...これswitch

jump_to_the_label_matchig(s)
{
   label1:
      ...
      done_quit_this;
   label2:
      ...
      done_quit_this;
   d'oh:
      ...
      done_quit_this;
}

そしてこれではない

now_jump_to_the_label_matchig(s)
{

   le'mme_wander_around_doing_things_that_could_have_been_done_before_me;

   label1:
      ...
      done_quit_this;
   label2:
      ...

もしそれが許されれば、そこですべてのプログラミングを喜んで行う人々を見つけるだろうと思います:-)

于 2013-05-30T03:34:40.130 に答える