gpt4 book ai didi

C#开关变量初始化: Why does this code NOT cause a compiler error or a runtime error?

转载 作者:太空狗 更新时间:2023-10-29 18:03:49 25 4
gpt4 key购买 nike

...
case 1:
string x = "SomeString";
...
break;
case 2:
x = "SomeOtherString";
...
break;
...


关于 C# 中的 switch 语句,有什么我不理解的地方吗?为什么在使用情况 2 时这不是错误?
编辑:此代码有效且不会引发错误。

最佳答案

您必须谨慎考虑此处的 switch 语句。事实上,根本没有创建变量作用域。不要因为 case 中的代码缩进就认为它位于子范围内。

当 switch block 被编译时,case 标签被简单地转换为标签,并且适当的 goto 指令在 switch 语句的开始处执行,具体取决于切换表达式。事实上,您可以手动使用 goto 语句来创建“fall-through”情况(C# 直接支持),如 the MSDN page建议。

goto case 1;

如果您特别想在 switch block 中为每个案例创建范围,您可以执行以下操作。

...
case 1:
{
string x = "SomeString";
...
break;
}
case 2:
{
string x = "SomeOtherString";
...
break;
}
...

要求您重新声明变量x(否则您将收到编译器错误)。确定每个(或至少某些)范围的方法在某些情况下非常有用,您肯定会不时在代码中看到它。

关于C#开关变量初始化: Why does this code NOT cause a compiler error or a runtime error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/864153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com