在 aswitch
中,如果我们写任何单词或单个字母而不是default
它,则不会引发错误。例如
switch(10)
{
case 1:
break;
hello:
break;
}
它运行而不会引发错误。
谁能解释这是如何工作的?
在 aswitch
中,如果我们写任何单词或单个字母而不是default
它,则不会引发错误。例如
switch(10)
{
case 1:
break;
hello:
break;
}
它运行而不会引发错误。
谁能解释这是如何工作的?
它正在编译,因为它hello:
是一个标签,因此可以是一个goto
. 当我编译这个时,我收到关于未引用标签的警告(因为我没有 goto)
这是您可以在 LINQPad 中使用的示例 - 您会注意到它同时打印“1”和“hello”:
switch(1)
{
case 1:
"1".Dump();
goto hello;
break;
hello:
"hello".Dump();
break;
}
switch
与声明无关。它是(由于不好的做法而很少使用)goto
语句的标签标识符。
goto something2;
something1:
Console.WriteLine("world");
goto done;
something2:
Console.WriteLine("hello");
goto something1;
done:
对于您的示例,您可以看到以下代码片段:
switch (10)
{
case 1:
break;
hello:
Console.Write("In hello label");
break;
case 2:
goto hello;
break;
}
在上面,您正在为 switch 语句中的 goto 语句定义一个标签。如果 switch 语句落到case 2
,那么它会去标签hello
。由于您的原始代码片段没有 agoto hello;
您将收到未引用标签的警告。
您的标签hello
不必对 switch 语句做任何事情(除了在内部定义)。