我怎样才能使这个代码更加优化

Nic*_*ahn 7 .net c# asp.net

我该如何优化这段代码?我不喜欢有案例陈述,有没有办法可以改进这段代码?

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

djd*_*d87 32

很容易.根据案例选项,您只能看到一个项目可见,因此只需按如下方式设置可见性:

pnlDate.Visible = (selVal == "date"); 
pnlSubject.Visible = (selVal == "subject");
pnlofficer.Visible = (selVal == "officer");
pnlCIA.Visible = false;
pnlMedia.Visible = false;
pnlStatus.Visible = (selVal == "status");    
Run Code Online (Sandbox Code Playgroud)

这比设置所有内容更好visible = false;,然后只显示您需要的项目,因为它只包含6行代码用于实际可见性设置.

  • 我可能会添加parantheses以使其更具可读性. (3认同)
  • 我会删除这些parantheses,因为这就是StyleCop引导我走向光明的方式;-) (3认同)

Nul*_*ion 9

其他方式:

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

d[selVal].Visible = true;
Run Code Online (Sandbox Code Playgroud)


小智 5

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;  
                }

            }
Run Code Online (Sandbox Code Playgroud)