Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# switch语句中局部变量的作用域_C# - Fatal编程技术网

C# switch语句中局部变量的作用域

C# switch语句中局部变量的作用域,c#,C#,我惊讶地发现switch语句中的局部变量的作用域是switch语句,而不是case语句。为什么呢?在每个案例周围添加花括号作为解决方法是否是一种好的做法 这不会编译: switch (n) { case 1: var i = 1; Console.WriteLine(i); break; default: var i = 2; Console.WriteLine(i); break; } 这并不

我惊讶地发现switch语句中的局部变量的作用域是switch语句,而不是case语句。为什么呢?在每个案例周围添加花括号作为解决方法是否是一种好的做法

这不会编译:

switch (n)
{
    case 1:
       var i = 1;
       Console.WriteLine(i);
       break;
    default:
       var i = 2;
       Console.WriteLine(i);
       break;
}
这并不编译:

switch (n)
{
    case 1:
    {
       var i = 1;
       Console.WriteLine(i);
       break;
    }
    default:
    {
       var i = 2;
       Console.WriteLine(i);
       break;
    }
}

这是C#专门做出的设计选择


变量仅存在于第一次声明变量的最内层大括号内。这使得仅仅通过查看就可以很容易地检查变量范围,而且我可能猜这也使得解析更容易

这是C#专门做出的设计选择


变量仅存在于第一次声明变量的最内层大括号内。这使得只需查看变量范围就可以轻松地检查变量范围,我想这也会使解析更容易

为什么?因为这就是语言的设计方式。作用域是介于
{…}
之间的代码,例如
if(1==1)vari=15;其他变量i=20将产生相同的问题。在旧时代(
C
,早期的
C++
case
s只是一个可计算的
标签(
开关
计算值,并进行
转到
以找到标签)答案更好的副本:@Henk将其添加到了副本列表中。
在每个案例周围添加大括号作为解决办法是否是一种好的做法
当然,这只是我的意见,但我认为这样做完全可以接受。为什么?因为这就是语言的设计方式。作用域是介于
{…}
之间的代码,例如
if(1==1)vari=15;其他变量i=20将产生相同的问题。在旧时代(
C
,早期的
C++
case
s只是一个可计算的
标签(
开关
计算值,并进行
转到
以找到标签)答案更好的副本:@Henk将其添加到了副本列表中。
在每个案例周围添加大括号作为解决办法是否是一种好的做法
当然,这只是我的观点,但我认为这样做完全可以接受。<。。。。有一些例外:考虑关闭…有一些例外:考虑关闭。