2012-01-22 7 views
3

私はいくつかのidを持つテーブルを持っていますが、idに応じてdefault.aspxで特定のpage.aspxをフォームで開きたいとします。私は今持っている何複数のifs /スイッチを使用したパターンまたはコーディングスタイル

は次のとおりです。私がチェックするためにIDの数が少ない場合

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

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

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

が、これは簡単です。しかし、私はチェックする数十のIDを持っています。数多くのifまたはswitch/caseなしでこれを行うプログラミングパターンやその他の方法はありますか?事前に

おかげ

EDIT: "=" を "==" で置換しました。

答えて

5

。データベースに柔軟性を持たせることもできますが、今すぐ辞書に入れておき、後で必要に応じてデータベース部分を追加することもできます。

あなたはフィールドとして検索を宣言することができます:

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. 
+0

なぜこれdownvotedされましたか? downvotingするときはコメントを残してください。 – driis

+0

ありがとうございます。私はこれが最高の答えだと思う – ajrpc

5

ただ、このようなURLの単純な配列を作成:あなたは、より複雑なユースケースを持っている場合は、別のオプションはConvention over configurationを使用することです

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

を。 このようにすることができます:

  1. テーブルには文字列IDがあります。
  2. あなたのリダイレクトコードは、のように簡単になります。IDとURLを含むルックアップを持っていることは非常に簡単だろう

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

id_table == 3のとき、あなたのコードはどうなりますか?配列の索引付けは順次ですが、id_table変数は順序付けされていません。他の応答で示されているように、辞書の使用は正しい解決策です。 – Abbas

+0

なぜそれは連続していないと思いますか?表示されているコードは単なるサンプルコードです。それがそうである場合、辞書は過度のものです。 –

+0

示されたコードは、明らかに、目的の結果を非常に間違って表すサンプルコードです。彼が要素2と要素6との間に置かなかったという事実は、彼が意味しなかったことを意味するものではない。 「if」文で '='を使用したという事実が、彼が '=='を意味していたわけではありません。 –

3

擬似コード、MOR以下、同様に、代わりに、Dictionary<K,V>を使用します

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

以降E:

response.redirect(dic[id_table]); 
1

あなたはIFSのステートメントを減少させるが、それはそれをカプセル化していないFactory Design Patternを使用することができます。あなたがよく書かれたコード

1

を取得するには、このパターンで他の回答を組み合わせることができます

更新

はDctionary内のリンクをしてください:

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

などを使用します。

Response.Redirect(links[id_table]); 
0

もう1つのoptio nはページをテーブルに格納し、リダイレクト先のページを選択します。

関連する問題