替代if.else语句
本文关键字:语句 else if 替代 | 更新日期: 2023-09-27 18:16:22
我在数据库中有一个表,其中包含一堆不同的控件。在我的Page_Init方法中,我需要根据传入的Session变量加载适当的控件。有没有更好的方法来做到这一点,然后使用一大堆的if. else语句?我有大约15到20种不同的场景,所以我不想写20个if…else语句。任何帮助都非常感谢!
标题为"Value"的数据表,包含三列:(ID, Name, Description):
ID | Name | Description
-------------------
1 | A | First
2 | B | Second
3 | C | Third
下面是我的代码:
ControlOne c1;
ControlTwo c2;
ControlThree c3;
protected void Page_Init(object sender, EventArgs e)
{
DataSet DS = Client.GetInformation(Session["Number"].ToString());
DataRow DR = DS.Tables["Value"].Rows[0];
if (DR["Name"].ToString() == "A" && DR["Description"].ToString() == "First")
{
c1 = (ControlOne)LoadControl("~/ControlOne.ascx");
panel1.Controls.Add(c1);
}
else if (DR["Name"].ToString() == "B" && DR["Description"].ToString() == "Second")
{
c2 = (ControlTwo)LoadControl("~/ControlTwo.ascx");
panel1.Controls.Add(c2);
}
else if (DR["Name"].ToString() == "C" && DR["Description"].ToString() == "Third")
{
c3 = (ControlThree)LoadControl("~/ControlThree.ascx");
panel1.Controls.Add(c3);
}
else if... //lists more scenarios here..
}
你可以这样做:
var controlsToLoad = new Dictionary<Tuple<string, string>, string>()
{
{ Tuple.Create("A", "First"), "~/ControlOne.ascx" },
{ Tuple.Create("B", "Second"), "~/ControlTwo.ascx" },
{ Tuple.Create("C", "Third"), "~/ControlThree.ascx" },
...
};
var key = Tuple.Create(DR["Name"].ToString(), DR["Description"].ToString());
if (controlsToLoad.ContainsKey(key))
{
Control c = LoadControl(controlsToLoad[key]);
panel1.Controls.Add(c);
}
它比大量的if..else或switch块更紧凑,更容易阅读。
可以使用switch语句
然而,有一个更好的方法。您的示例在DB表中有ID、Name、Description。因此name字段保持与usercontrol名称相同你可以这样做:
string controlName = dr["Name"];
c1 = LoadControl(string.Format("~/{0}.ascx", controlName));
panel1.Controls.Add(c1);
在我看来,你可以使用一个开关语句,只测试"名称"或"描述"。