C# 如何使此代码更优化

C# 如何使此代码更优化,c#,.net,asp.net,C#,.net,Asp.net,如何优化此代码?我不喜欢case语句,有什么方法可以改进这段代码吗 protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e) { string selVal = ddlFilterResultBy.SelectedValue.ToString().ToLower(); switch (selVal) { case "date":

如何优化此代码?我不喜欢case语句,有什么方法可以改进这段代码吗

protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e)
{ 
    string selVal = ddlFilterResultBy.SelectedValue.ToString().ToLower();

    switch (selVal)
    {
        case "date":
            pnlDate.Visible = true; 
            pnlSubject.Visible = false;
            pnlofficer.Visible = false;
            pnlCIA.Visible = false;
            pnlMedia.Visible = false;
            pnlStatus.Visible = false;                    
            break;

        case "subject":
            pnlDate.Visible = false;
            pnlSubject.Visible = true;
            pnlofficer.Visible = false;
            pnlCIA.Visible = false;
            pnlMedia.Visible = false;
            pnlStatus.Visible = false;
            break;

        case "officer":
            pnlDate.Visible = false;
            pnlSubject.Visible = false;
            pnlofficer.Visible = true;
            pnlCIA.Visible = false;
            pnlMedia.Visible = false;
            pnlStatus.Visible = false;
            break;

        case "status":
            pnlDate.Visible = false;
            pnlSubject.Visible = false;
            pnlofficer.Visible = false;
            pnlCIA.Visible = false;
            pnlMedia.Visible = false;
            pnlStatus.Visible = true;
            break;

        default:
            pnlDate.Visible = false;
            pnlSubject.Visible = false;
            pnlofficer.Visible = false;
            pnlCIA.Visible = false;
            pnlMedia.Visible = false;
            pnlStatus.Visible = false;
            break;
    }
}

很简单。根据“案例”选项,您只能使一个项目可见,因此只需按如下方式设置可见性:

pnlDate.Visible = (selVal == "date"); 
pnlSubject.Visible = (selVal == "subject");
pnlofficer.Visible = (selVal == "officer");
pnlCIA.Visible = false;
pnlMedia.Visible = false;
pnlStatus.Visible = (selVal == "status");    
这比将所有内容设置为
visible=false要好然后只显示您需要的项目,因为这包含了实际可见性设置的6行代码。

另一种方式:

protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e)
            { 
                string selVal = ddlFilterResultBy.SelectedValue.ToString().ToLower();
                        pnlDate.Visible = false;
                        pnlSubject.Visible = false;
                        pnlofficer.Visible = false;
                        pnlCIA.Visible = false;
                        pnlMedia.Visible = false;
                        pnlStatus.Visible = false;
                switch (selVal)
                {
                    case "date":
                        pnlDate.Visible = true;                    
                        break;

                    case "subject":
                        pnlSubject.Visible = true;
                        break;

                    case "officer":
                        pnlofficer.Visible = true;
                        break; 
                    case "status":
                        pnlStatus.Visible = true;
                        break;  
                }

            }
// set everything to false   
Dictionary<string, type> d = new Dictionary<string, type>()
{
    {"date", pnlDate},
    {"subject", plnSubject},
    {"officer", plnOfficer},
    {"status", plnStatus}
};

d[selVal].Visible = true;
//将所有内容设置为false
字典d=新字典()
{
{“日期”,pnlDate},
{“主题”,plnSubject},
{“官员”,plnOfficer},
{“状态”,plnStatus}
};
d[selVal].Visible=true;
您可以这样做:

protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e) { 
  string selVal = ddlFilterResultBy.SelectedValue.ToString().ToLower();

  pnlDate.Visible = (selVal == "date");
  pnlSubject.Visible = (selVal == "subject");
  pnlofficer.Visible = (selVal == "officer");
  pnlCIA.Visible = (selVal == "cia");
  pnlMedia.Visible = (selVal == "media");
  pnlStatus.Visible = (selVal == "status");
}
或者这一条虽然可读性较差,但更准确:

protected void ddlFilterResultBy_SelectedIndexChanged(object sender, EventArgs e) { 
  string selVal = ddlFilterResultBy.SelectedValue.ToString();

  pnlDate.Visible = String.Equals(selVal, "date", StringComparison.OrdinalIgnoreCase);
  pnlSubject.Visible = String.Equals(selVal, "subject", StringComparison.OrdinalIgnoreCase);
  pnlofficer.Visible = String.Equals(selVal, "officer", StringComparison.OrdinalIgnoreCase);
  pnlCIA.Visible = String.Equals(selVal, "cia", StringComparison.OrdinalIgnoreCase);
  pnlMedia.Visible = String.Equals(selVal, "media", StringComparison.OrdinalIgnoreCase);
  pnlStatus.Visible = String.Equals(selVal, "status", StringComparison.OrdinalIgnoreCase);
}

优化和提高可读性是有区别的。 因此,我想您正在考虑更多地提高可读性,因为这里并不真正需要优化。这里没有一个算法,你可以调整它,使其在相当长的时间内更快


答案1和2将是我提高可读性的选择

我认为您需要一个选项卡控件

如果您不喜欢,只需隐藏选项卡,并通过代码进行页面索引

优点是您可以在设计时编辑和查看GUI


维护起来会容易得多。

我可能会添加偏执,以使其更具可读性。我会删除偏执,因为这就是StyleCop引导我走向光明的方式;-)除此之外,您还可以:关闭pnlCIA和pnlMedia上的视图状态,将visibility=false设置为aspx中的默认值。因此,您可以去掉2.visible=false行。基本上,在每个可见的回发上,两个面板的默认值都将设置为false,除非它设置为false。下一票是怎么回事?我知道代码与原始代码的功能不完全相同;这只是为了说明我的想法。我使用jquery和div,但是我最终遇到了问题。你可以看到我在这里发布的问题,我放弃了使用jquery/div的想法