switch语句中分配的无法访问的变量

use*_*597 0 c# switch-statement

我有以下代码.一个switch语句,它接受一个州名并将另一个变量设置为该状态的abbriviation.但是,在我关闭我的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);
Run Code Online (Sandbox Code Playgroud)

最后一行给出了一个错误,指出变量在当前上下文中不存在.有任何想法吗?

Dou*_*las 7

编译器要求您确保stateab在读取变量之前为变量分配了一些值.在您的情况下,您需要满足值case不满足任何子句的情况s(即使您的应用程序的逻辑无法做到这一点).

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

string stateab = "";
Run Code Online (Sandbox Code Playgroud)

......或default在你的switch陈述中加入一个条款:

case "Wyoming":
    stateab = "WY";
    break;
default:
    stateab = "Unknown";
    break;
Run Code Online (Sandbox Code Playgroud)

  • OP发布后不久修改了代码.我假设错误消息未更新. (2认同)