[英]can I use a c# switch here?
我想重構這段代碼。 也許如果可能的話,使用開關? 或者在性能方面是否相同?
string rawUrl = context.Request.RawUrl ?? string.Empty;
if (rawUrl.Contains("mypage.aspx"))
{
}
if (rawUrl.Contains("mypage2.aspx"))
{
}
etc..
不是直接的,因為你想要一個“包含”關系,而不是一個完全相等的關系。
但是,如果您願意,可以通過嘗試從我假設的URL解析頁面名稱,將其存儲在單獨的String
變量中,並打開該String
來間接地執行此操作。
例如:
// Get the URL from some external source (wherever you're already getting it from)
String rawUrl = "http://www.example.com/foo/bar.aspx";
// Means of parsing will be dependent on the format in which you expect the URL.
String page = rawUrl.Substring(rawUrl.LastIndexOf("/") + 1);
switch (page) {
case "bar.aspx":
// Do stuff
break;
case "foo.aspx":
// Do stuff
break;
}
當然,請將這種解析方法與一粒鹽一起使用; 這個例子是為了向你展示它是可能的,但請注意,這種解析方法可能會在很多情況下引發異常,但為了簡潔起見,我省略了這些檢查。
Switch Cases必須是一個常量值。 你最好選擇使用if / else之類的:
string rawUrl = context.Request.RawUrl ?? string.Empty;
if (rawUrl.Contains("mypage.aspx"))
{
//code
}
else if (rawUrl.Contains("mypage2.aspx"))
{
//more code
}
如果你擔心表現(這很好!)那么其他的就是你要走的路。 雖然不使用else將具有相同的功能,但通過添加else,您告訴代碼不處理任何其他條件。 因此10 if語句將導致10如果條件被處理不重要,而10 if / else語句可能導致10,或者它可能只導致1。
編輯:
想到這一點,我注意到你正在使用上下文對象。 如果您真的想要一個switch語句,可以執行以下操作:
string page = context.Request.Url.Segments.Last();
switch(page)
{
case "mypage.aspx":
//code
break;
case "mypage2.aspx":
//more code
break;
}
不適用於包含。
嘗試單獨隔離頁面名稱,您可以這樣做。
switch(pageName)
{
case "mypage.aspx";
break;
case "mypage2.aspx";
break;
}
我認為使用Dictionary
會更好。
首先,從原始URL中提取文件名。
然后,使用Dictionary<string,TValue>
。
如果對頁面的操作幾乎相同,請將TValue
設置為與頁面關聯的數據類型。
如果操作非常不同,請將TValue
設置為委托類型,例如Action
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.