使用多个ifs /开关编程模式或编码风格

时间:2012-01-22 16:11:07

标签: c# asp.net design-patterns coding-style

我有一个带有一些id的表,我想在default.aspx中打开一个带有表单的某个page.aspx,具体取决于id。

我现在拥有的是:

if(id_table ==1) {
response.redirect("PageBla.aspx");
}

if(id_table==2) {
response.redirect("Page21231.aspx");
}

if(id_table==6) {
....
}
 etc etc....

如果我要检查少量的ID,这很简单。但我会检查几十个ID。没有任何编程模式或任何其他方法,没有几十个ifs或switchs / Cases?

提前致谢

编辑:“=”被替换为“==”。

6 个答案:

答案 0 :(得分:5)

只需创建一个简单的URL数组,如下所示:

string[] urls = {"PageBla.aspx", "Page21231.aspx"};
response.redirect(urls[id_table]);

如果您有更复杂的用例,另一个选项是使用Convention over configuration。 你可以这样做:

  1. 您的表格将包含字符串ID。
  2. 您的重定向代码将简单如下:

    Response.Redirect(tableId + ".asxp");
    

答案 1 :(得分:5)

包含ID和URL的查找很容易。它可以在数据库中提供灵活性,但您现在也可以将它们放入字典中,如果您发现需要它,可以稍后添加数据库部分。

您可以将查询声明为字段:

private static readonly Dictionary<int, string> redirectLookup = new Dictionary<int,string> {
    {1, "PageBla.aspx"},
    {2, "Page21231.aspx"},
    // .....
    {6, "somepage6.apx"}

};

在您的重定向逻辑中:

string redirect;
if (redirectLookup.TryGetValue(id_table, out redirect)) 
    Response.Redirect(redirect);
else
    // some default action when that ID was not mapped.

答案 2 :(得分:3)

使用Dictionary<K,V>,或多或少使用伪代码

var dic = new Dictionary<int, string> { {1, "PageBla.aspx"}, {2, "Page21231.aspx"}..}

在代码之后:

 response.redirect(dic[id_table]);

答案 3 :(得分:1)

您可以使用不会减少ifs语句的Factory Design Pattern,但它会封装它。

<强>更新

您可以将其他答案与此模式结合使用,以获得编写良好的代码

答案 4 :(得分:1)

在字典中保留链接:

    Dictionary<int, string> links = 
        new Dictionary<int, string>()
    {
        { 1, "One.aspx" },
        { 2, "Two.aspx" },
        { 3, "Three.aspx" }
    };

并使用类似的:

    Response.Redirect(links[id_table]);

答案 5 :(得分:0)

另一种选择是将页面存储在表格中,选择要重定向到的页面。