當涉及到關鍵字和其他(域)衆所周知的字符串值我個優選使用某種解析。在您的特定情況下,我可能會定義一個枚舉
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之間的情況下),則開關構造工作正常。
我在一個單獨的功能,因爲它使代碼更容易推理時,每個函數/方法做一件事拆分映射出。 交換機中的默認情況會引發異常。當你添加一個新的關鍵字,但忘記在交換機中處理它時,這會被捕獲。你可以選擇其他的默認值。我通常喜歡在默認情況下拋出異常,因爲在更改代碼的其他部分時,我忘記了執行某些操作。 (2)。我還在你的response.redirect中添加了一個bool(true),它告訴框架你已經完成了響應,並且它可以將它發送給客戶端(這是微不足道的,但我更願意將我的代碼作爲顯式的可能,當涉及到代碼的意圖。)
(1)如果你可以得到沒有關鍵字字符串讓我知道,我可以顯示你將如何使用TryParse而不是 (2)我會很喜歡有一個編譯器警告,如果我(使用字符串這不是當EG)
此代碼甚至不會編譯剛走了一個可能的情況下,價值就像我得到,如果我有一個不完整的模式在F#的匹配,但是這並不一定可能的交換機。 – leppie
switch語句將是一個有效的替代構造在那裏使用。而你的方法不會在任何代碼路徑中返回一個值。 –
對於你需要先諮詢編譯器的正確性,那麼你可以在這裏發佈 – V4Vendetta