Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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#_Switch Statement - Fatal编程技术网

C# switch语句中分配的不可访问变量

C# switch语句中分配的不可访问变量,c#,switch-statement,C#,Switch Statement,我有以下代码。一种switch语句,它接受一个状态名并将另一个变量设置为该状态的缩写。但是,在我关闭switch语句之后,我得到一个错误,说变量不可访问 string stateab; switch (s) { case "Alabama": stateab = "AL"; break; case "Alaska": stateab = "AK"; break; case "Arizona":

我有以下代码。一种switch语句,它接受一个状态名并将另一个变量设置为该状态的缩写。但是,在我关闭switch语句之后,我得到一个错误,说变量不可访问

string stateab;

switch (s)
{
    case "Alabama":
        stateab = "AL";
        break;
    case "Alaska":
        stateab = "AK";
        break;
    case "Arizona":
        stateab = "AZ";
        break;
    case "Arkansas":
        stateab = "AR";
        break;
    case "California":
        stateab = "CA";
        break;
    case "Colorado":
        stateab = "CO";
        break;
    case "Connecticut":
        stateab = "CT";
        break;
    case "Delaware":
        stateab = "DE";
        break;
    case "DENIED":
        stateab = "DENIED";
        break;
    case "District of Columbia":
        stateab = "DC";
        break;
    case "Florida":
        stateab = "FL";
        break;
    case "Georgia":
        stateab = "GA";
        break;
    case "Hawaii":
        stateab = "HI";
        break;
    case "Idaho":
        stateab = "ID";
        break;
    case "Illinois":
        stateab = "IL";
        break;
    case "Indiana":
        stateab = "IN";
        break;
    case "Iowa":
        stateab = "IA";
        break;
    case "Kansas":
        stateab = "KS";
        break;
    case "Kentucky":
        stateab = "KY";
        break;
    case "Louisiana":
        stateab = "LA";
        break;
    case "Maine":
        stateab = "ME";
        break;
    case "Maryland":
        stateab = "MD";
        break;
    case "Massachusetts":
        stateab = "MA";
        break;
    case "Michigan":
        stateab = "MI";
        break;
    case "Minnesota":
        stateab = "MN";
        break;
    case "Mississippi":
        stateab = "MS";
        break;
    case "Missouri":
        stateab = "MO";
        break;
    case "Montana":
        stateab = "MT";
        break;
    case "Nebraska":
        stateab = "NE";
        break;
    case "Nevada":
        stateab = "NV";
        break;
    case "New Hampshire":
        stateab = "NH";
        break;
    case "New Jersey":
        stateab = "NJ";
        break;
    case "New York":
        stateab = "NY";
        break;
    case "North Carolina":
        stateab = "NC";
        break;
    case "North Dakota":
        stateab = "ND";
        break;
    case "Ohio":
        stateab = "OH";
        break;
    case "Oklahoma":
        stateab = "OK";
        break;
    case "Oregon":
        stateab = "OR";
        break;
    case "Pennsylvania":
        stateab = "PA";
        break;
    case "Rhode Island":
        stateab = "RI";
        break;
    case "South Carolina":
        stateab = "SC";
        break;
    case "South Dakota":
        stateab = "SD";
        break;
    case "Tennessee":
        stateab = "TN";
        break;
    case "Texas":
        stateab = "TX";
        break;
    case "Utah":
        stateab = "UT";
        break;
    case "Vermont":
        stateab = "VT";
        break;
    case "Virginia":
        stateab = "VA";
        break;
    case "Washington":
        stateab = "WA";
        break;
    case "West Virginia":
        stateab = "WV";
        break;
    case "Wisconsin":
        stateab = "WI";
        break;
    case "Wyoming":
        stateab = "WY";
        break;

}

Console.WriteLine(stateab);

最后一行给出了一个错误,说明变量在当前上下文中不存在。有什么想法吗?

你需要
休息且不继续。

C#在使用switch语句时需要默认情况。没有它就无法编译。最后值得尝试一个默认案例

default:
   //do something
   break;

编译器要求您确保在读取
stateab
变量之前为其赋值。在您的情况下,您需要满足
case
子句中的
s
值都不满足的情况(即使应用程序的逻辑无法满足)

您可以通过使用初始值初始化
stateab
变量来轻松解决此问题:

string stateab = "";
…或在
开关
语句中包含
默认
子句:

case "Wyoming":
    stateab = "WY";
    break;
default:
    stateab = "Unknown";
    break;
switch (expression) {    
      case constant-expression: statement
      jump-statement  
      [default:statement
      jump-statement] 
}

这是
开关
语句的格式:

case "Wyoming":
    stateab = "WY";
    break;
default:
    stateab = "Unknown";
    break;
switch (expression) {    
      case constant-expression: statement
      jump-statement  
      [default:statement
      jump-statement] 
}

您应该包括一个
默认值
大小写,并在每个大小写末尾使用
中断

您有一个编译器错误,因为如果您向
开关
语句传递一些字符串,这些字符串将不会在大小写中列出(例如
“Hello world”
)。所以,您应该在第一次使用局部变量之前初始化它。您可以在
switch
语句之前的声明点执行此操作:

string stateab = "";
或者,您可以将
default
大小写添加到您的
开关
中,在该开关中引发异常(或提供缩写的默认值)


.

您从哪里想到需要一个
默认的
案例标签!?不需要;这里的问题是缺少对
stateab
的明确分配。这是您的完整代码吗?设置
string stateab=string,空时会发生什么?此代码向带有@Steve的字典树或带有description属性的枚举请求帮助。无论如何都不是这样。OP在发布代码后不久就修改了代码。我假设错误信息没有更新。啊,对不起,他在宽限期内更新了,所以我看不到。请忽略我的评论,然后:)没问题:-)在更新之前发布,并解决了原始问题。(OP在每个
案例
块的末尾使用了
continue;
,而不是
break;
。)