在switch case中,如果我们将"default"写为任何单词或单个字母,则不会引发错误

Pra*_*tik 15 c# switch-statement

在a中switch,如果我们写任何单词或单个字母而不是default 它不会抛出错误.例如

switch(10)
{
    case 1:
    break;

    hello:
    break;
}
Run Code Online (Sandbox Code Playgroud)

它运行时没有抛出错误.

谁能解释一下这是如何工作的?

pst*_*jds 16

它正在编译,因为它是hello:一个标签,因此可以作为一个目的地goto.当我编译这个时,我收到了关于未引用标签的警告(因为我没有转到)

这是一个你可以在LINQPad中抛出的例子 - 你会注意到它打印"1"和"你好":

switch(1)
{
    case 1:
        "1".Dump();
        goto hello;
    break;

    hello:
        "hello".Dump();
        break;
}
Run Code Online (Sandbox Code Playgroud)


McG*_*gle 13

这与switch声明无关.它是(由于不良做法而很少使用)goto语句的标签标识符.

goto something2;
something1:
    Console.WriteLine("world");
    goto done;
something2:
    Console.WriteLine("hello");
goto something1;
done:
Run Code Online (Sandbox Code Playgroud)


Hab*_*bib 5

对于您的示例,您可以看到以下代码段:

switch (10)
{
    case 1:
        break;

    hello:
        Console.Write("In hello label");
        break;
    case 2:
        goto hello;
        break;
}
Run Code Online (Sandbox Code Playgroud)

在上面,您将在switch语句中为goto语句定义标签.如果switch语句属于case 2,则它将转到标签hello.由于您的原始代码段没有,因此goto hello;您将收到未引用标签的警告.

您的标签hello 不必对switch语句执行任何操作(除了在内部定义).