如何在C#中的switch case中使用web.config值而不使用if,else循环“预期值为常量值”。

时间:2016-11-29 07:33:04

标签: c# web-config switch-statement constants

以下是开关案例

switch (strID)
{
    case ConfigurationManager.AppSettings["Key1"].ToString():
        Label1.Visible = true;
        break;
    case ConfigurationManager.AppSettings["Key2"].ToString():
        Label2.Visible = true;
        break;
    case ConfigurationManager.AppSettings["Key3"].ToString():
        Label3.Visible = true;
        break;
    default:
        Label1.Visible = true;
        break;
}

但它会给出错误“预期值为常数。”

我知道你在switch语句中不能有变量。但是有什么办法吗?

3 个答案:

答案 0 :(得分:1)

在case语句中只能使用常量值。

最好你可以使用if语句,例如

if(ConfigurationManager.AppSettings["Key1"].ToString() == strID)
{
   Label1.Visible = true;
}
else if(ConfigurationManager.AppSettings["Key2"].ToString() == strID)
{
   Label2.Visible = true;
}

。 。 。 。 。 。

else
{
    //default
}

答案 1 :(得分:0)

将Web.Config文件中的3个值分配给3个不同的常量,如const string key1 = ConfigurationManager.AppSettings["Key1"].ToString(),并在switch内部使用它们而不是给出ConfigurationManager.Appsettings["Key1"].ToString();

答案 2 :(得分:0)

您可以在switch's CASE语句中包含变量。但是,那必须是编译时常数,即`const'变量

CASE语句需要保持不变;通过使它们保持不变,它可以使语句更加优化。 Switch将生成等效的哈希表,其中case语句值为键。如果值可以改变,那么这种方法就无法使用。

来自ConfigurationManager.AppSettings的值是在运行时决定的。因此您无法在Switch's CASE语句中使用它。

您可以使用if.. else语句作为替代解决方案。

请参阅 - C# switch statement limitations - why?