キーワードやその他の (ドメインの) よく知られた文字列値に関しては、何らかの解析を使用することを好みます。あなたの特定のケースでは、おそらく列挙型を定義します
public enum Keywords {
SettleLG,
SettHjort,
SkutteLG,
SkuttHjort,
RundBall
}
次に、キーワードを解析できます
//Note this will (deliberately) throw an exception
//if the string does not match a defined value
//depending on your needs you might want to handle that
var parsedKeyword = (Keywords)Enum.Parse(typeof(Keywords),keyword,true);
それが整ったら、スイッチを書くことができます
private string GetRelativUrlFromKeyword(Keywords parsedKeyword){
switch(parsedKeyword)
case Keywords.SetteLG:
case Keywords.SettHjort:
return "../SMSFunction/SeenSMS.ascx";
case Keywords.SkutteLG:
case Keywords.SkuttHjort:
return "../SMSFunction/ShotSMS.ascx";
case KeyWords.RundBall:
return "../SMSFunction/RoundballSMS.ascx";
default:
throw new InvalidOperationException("Keyword not recognized" + parsedKeyword);
}
すべてをまとめると、呼び出しコードは次のようになります
var parsedKeyword = (Keywords)Enum.Parse(typeof(Keywords),keyword);
var relativeUrl = GetRelativUrlFromKeyword(parsedKeyword);
Response.Redirect(relativeUrl,true);
値を列挙型として解析することにより、値 (1) も検証します。これにより、誤った値を渡すコードの他の部分に関連するバグを簡単に見つけることができます。キーワードと相対 URL の間の場合のように、ある値のセットと別の値のセットの間にハードコーディングされたマップが必要な場合は、スイッチ コンストラクトが正常に機能します。
各関数/メソッドが 1 つのことを実行するタイミングをコードで判断しやすくするため、マッピングを別の関数に分割しました。スイッチのデフォルトのケースでは、例外がスローされます。これは、新しいキーワードを追加したときにそれをスイッチで処理するのを忘れたときにキャッチするためです。他のデフォルトを選択できます。私は通常、コードの他の部分を変更するときに何かをするのを忘れたために、デフォルトのケースで例外をスローするのが好きです。(2)。また、response.redirect に bool (true) を追加しました。これは、フレームワークに、応答が完了したこと、およびそれをクライアントに送信できることを伝えます (これはマイナーですが、コードを次のように明示的にすることを好みます)。コードの意図に関しては可能です。)
(1) キーワード文字列を取得できない場合はお知らせください。代わりに TryParse を使用する方法を示すことができます。 F# では不完全なパターン マッチングがありますが、スイッチでは必ずしも可能ではありません (たとえば、文字列を使用する場合はそうではありません)。