2012-07-24 40 views
3

我有很多這樣的代碼行......這只是我現在正在嘗試的一件事。If else minifier

if (RI2.Text.Contains("SOS") || RI2.Text.Contains("WAR")) 
{ 
    Response.Redirect("http://mydomain.com/rabat"); 
} 
if (RI2.Text.Contains("sos") || RI2.Text.Contains("war")) 
{ 
    Response.Redirect("http://mydomain.com/rabat"); 
} 

如何縮小此代碼。我的意思是,它非常醜陋,並且有許多類似這樣的代碼。

有沒有更好的方式做到這一點,我不知道。

請大家幫忙。感謝您的時間和幫助。

+1

也許switch語句是你所需要的? – annonymously 2012-07-24 08:37:43

+0

你可以把所有的文字改爲小寫,然後檢查。您也可以使用正則表達式來搜索所有有效的文本選項。 – Liron 2012-07-24 08:38:47

+0

是一個switch case語句是你需要的 – 2012-07-24 08:39:36

回答

2

,你可以做一個電話,像

//this will accept "SOS" and "sos" 
if(RI2.Text.ToLower().Contains("sos") || 
     RI2.Text.ToLower().Contains("war")) 
{ 
    .... 
} 
0
if(string.Equals("war", RI2.Text, StringComparison.InvariantCultureIgnoreCase) || 
       string.Equals("sos", RI2.Text, StringComparison.InvariantCultureIgnoreCase)) 
       Response.Redirect("http://mydomain.com/rabat"); 
+1

他想測試它是否包含** not ** equals **。包含不需要StringComparison。 – 2012-07-24 08:40:29

0

創建字符串對列表,其中一個是在大寫的搜索字符串,另一個是重定向位置。

遍歷列表檢查每個搜索字符串與大寫文本。如果您發現匹配重定向到對中指定的位置。

3

不知道我完全理解你的要求,但是在這裏你去:

if(RI2.Text.ToLower().Contains("sos") || RI2.Text.ToLower().Contains("war")) { 
    Response.Redirect("http://mydomain.com/rabat"); 
} 
4

試試這個正則表達式。

  • 忽略了比較(SOSsos匹配)
  • 不發生變異的字符串作爲你不叫ToLower()
  • 的代碼只有2行

您可選擇precompile的情況下如果表達式(SOS|WAR)是更多性能的常數,則表達式。

if (Regex.IsMatch(RI2.Text, "SOS|WAR", RegexOptions.IgnoreCase)) 
    Response.Redirect("http://mydomain.com/rabat"); 
+3

這是更好的選擇。將文本轉換爲小寫/大寫可能會在某些語言中產生特殊的副作用,如土耳其語(http://www.codinghorror.com/blog/2008/03/whats-wrong-with-turkey.html)。 – 2012-07-24 08:44:36

2

您可以將字符串轉換爲小寫,刪除一個if語句,然後使用linq any語句。

var search=new[] {"sos","war"}; 

if (search.Any(x=>RI2.Text.ToLower().Contains(x))) { 
    Response.Redirect("http://mydomain.com/rabat"); 
} 

甚至可以收集匹配到目標網址。

var search = new Dictionary<string,string>{ 
    {"sos","http://mydomain.com/rabat"}, 
    {"war","http://mydomain.com/rabat"}, 
}; 

使用LINQ

var url=search.Keys.Where(x=>RI2.Text.ToLower().Contains(x)).Select(x=>search[x]).FirstOrDefault(); 
if (url!=null) { 
    Response.Redirect(url); 
} 
0

使用正則表達式:

var pattern = "(sos|war)"; 
if(Regex.IsMatch(RI2.Text.ToLower(), pattern)) 
    Response.Redirect("http://mydomain.com/rabat"); 
+0

爲什麼同時使用'ToLower()'和正則表達式? – Aphelion 2012-07-24 08:51:48

1

您可以創建一個extention串如下

public static bool Contains(this string value, string[] values) 
    { 
     foreach (string comparar in values) 
     { 
      if (value.ToUpper().Contains(comparar.ToUpper())) return true; 
     } 
     return false; 
    } 
+1

如果您將值設爲參數,那麼您可以在呼叫線上使用多個值。例如對於'公共靜態布爾包含(這個字符串值,字符串[]值)'你可以做'myString.Contains(「SOS」,「戰爭」)' – 2012-07-24 09:33:18

0

鑑於雙方的URL響應。重定向是相同

string lowerRI2 = RI2.Text.ToLower(); 
if (lowerRI2.Contains("sos") || lowerRI2.Contains("war")) 
    Response.Redirect("http://mydomain.com/rabat"); 
1

相反轉換字符串大小寫字符使用string.IndexOf與忽略大小寫

if (RI2.Text.IndexOf("sos",StringComparison.InvariantCultureIgnoreCase) >= 0 || 
    RI2.Text.IndexOf("war",StringComparison.InvariantCultureIgnoreCase) >= 0) 
{ 
     Response.Redirect("http://mydomain.com/rabat"); 
}