【问题标题】:How can I use web.config value in switch case in C# without if , else loop "A constant value is expected."如何在没有 if 的情况下在 C# 的 switch case 中使用 web.config 值,否则循环“需要一个常量值”。
【发布时间】:2016-11-29 07:33:04
【问题描述】:

下面是开关盒

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 语句中使用变量。但是有什么办法吗?

【问题讨论】:

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


【解决方案1】:

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

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

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

。 . . . . . .

else
{
    //default
}

【讨论】:

  • 但我不能使用 if 因为我必须在当前场景中改变非常大的变化
  • 在switch case语句中是不可能的。
【解决方案2】:

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

CASE 语句需要保持不变;通过让它们保持不变,可以对语句进行更多优化。 Switch 将生成等效的哈希表,其中 case 语句的值作为键。如果值可以更改,则无法使用该方法。

ConfigurationManager.AppSettings 的值是在运行时决定的。所以你不能在Switch's CASE 语句中使用它。

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

见 - C# switch statement limitations - why?

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • switch 语句也不支持变量
    • 没有。不要将其声明为变量,而是将其声明为常量。请使用以下代码: const string key1 = ConfigurationManager.AppSettings["Key1"].ToString();常量字符串 key2 = ConfigurationManager.AppSettings["Key2"].ToString(); const string key3 = ConfigurationManager.AppSettings["Key3"].ToString(): switch (strID) {case key1: Label1.Visible = true;休息;案例key2:Label2.Visible = true;休息;案例key3:Label3.Visible = true;休息;默认值:Label1.Visible = true;休息;}
    猜你喜欢
    • 2023-04-07
    • 2020-04-04
    • 1970-01-01
    • 2011-05-08
    • 2020-10-13
    • 2015-12-02
    • 2020-10-15
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多