编程语言
首页 > 编程语言> > 声明的var的C#开关大小写行为

声明的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