C# 如何使此代码更优化
如何优化此代码?我不喜欢case语句,有什么方法可以改进这段代码吗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":
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的想法