声明的var的C#开关大小写行为
作者:互联网
这个问题已经在这里有了答案: > Case Statement Block Level Declaration Space in C# 5个
我对切换用例条件中的术语使用感到有些困惑.为什么c#在一个已声明变量的情况下接受所有变量,然后在switch语句的顶部自动声明它们?
例如:
switch (test)
{
case "hello":
string demo = "123";
break;
case "world":
demo = "1234";
break;
// not working
case "hello world":
demo = demo + "1234567";
break;
}
即使在情况“ hello下声明”,我也可以在情况“ world”下分配变量demo.但是c#似乎仅声明该值并且不设置任何值,因为获取和设置该值,(请参阅案例) “ hello world”是不可能的.
为什么C#不为每个case块打开一个术语/作用域,并通过简单的break或return来关闭它?
解决方法:
因为您没有开始新的作用域.就个人而言,我几乎在案例陈述中仅使用块作用域:
switch (test)
{
case "hello":
{
string demo = "123";
break;
}
case "world":
{
var demo = "1234";
break;
}
case "hello world":
{
var demo = 34;
break;
}
}
我认为,这样做的主要原因是1)简单性和2)与C的兼容性.已经有一种用于启动新块作用域的语法,并且使用了{…}.无需添加其他规则“仅因为”.在C#中,对于每个case语句没有单独的作用域没有什么意义,因为禁止您读取可能未分配的变量.
例如,在C#中不允许以下内容:
switch (test)
{
case 1: string demo = "Hello"; goto case 2;
case 2: demo += " world"; break;
}
当然,解决此问题的方法相当简单-只需在switch作用域之外声明本地变量,并在需要时为其提供默认值即可.
标签:declaration,switch-statement,case,c 来源: https://codeday.me/bug/20191028/1949372.html