3

我有很多这样的代码行。这只是我现在正在尝试的一件事。

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");
}

我如何缩小这段代码。我的意思是,它非常丑陋,并且有许多类似于此的代码行。

有没有更好的方法可以做到这一点,我不知道。

请帮忙。感谢您的时间和帮助。

4

10 回答 10

4

试试这个正则表达式。

  • 在比较中忽略大小写(SOSsos匹配)
  • 不会因为您不调用而改变字符串ToLower()
  • 只有 2 行代码

如果表达式 ( ) 是一个常量,您可以选择预编译表达式以获得更高的性能。SOS|WAR

if (Regex.IsMatch(RI2.Text, "SOS|WAR", RegexOptions.IgnoreCase))
    Response.Redirect("http://mydomain.com/rabat"); 
于 2012-07-24T08:42:28.463 回答
3

不确定我是否完全理解你的要求,但你去:

if(RI2.Text.ToLower().Contains("sos") || RI2.Text.ToLower().Contains("war")) {
  Response.Redirect("http://mydomain.com/rabat");
}
于 2012-07-24T08:40:17.913 回答
2

你可以打一个电话,比如

//this will accept "SOS" and "sos"
if(RI2.Text.ToLower().Contains("sos") || 
      RI2.Text.ToLower().Contains("war")) 
{
  ....
}
于 2012-07-24T08:38:43.713 回答
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);
}
于 2012-07-24T08:44:41.723 回答
1

您可以按如下方式创建对字符串的扩展

public static bool Contains(this string value, string[] values)
    {
        foreach (string comparar in values)
        {
            if (value.ToUpper().Contains(comparar.ToUpper())) return true;
        }
        return false;
    }
于 2012-07-24T08:44:53.897 回答
1

而不是将字符串转换为小写或大写使用string.IndexOf忽略大小写

if (RI2.Text.IndexOf("sos",StringComparison.InvariantCultureIgnoreCase) >= 0  || 
    RI2.Text.IndexOf("war",StringComparison.InvariantCultureIgnoreCase) >= 0 )
{
        Response.Redirect("http://mydomain.com/rabat");
}
于 2012-07-24T09:01:23.090 回答
0
if(string.Equals("war", RI2.Text, StringComparison.InvariantCultureIgnoreCase) ||
                string.Equals("sos", RI2.Text, StringComparison.InvariantCultureIgnoreCase))
                Response.Redirect("http://mydomain.com/rabat");
于 2012-07-24T08:39:59.777 回答
0

创建一个字符串对列表,其中一个是大写的搜索字符串,另一个是重定向位置。

遍历列表检查每个搜索字符串与大写文本。如果您发现匹配重定向到该对中指定的位置。

于 2012-07-24T08:40:15.460 回答
0

使用正则表达式:

var pattern = "(sos|war)";
if(Regex.IsMatch(RI2.Text.ToLower(), pattern))
    Response.Redirect("http://mydomain.com/rabat");
于 2012-07-24T08:44:48.130 回答
0

鉴于 Response.Redirect 的 Url 相同

string lowerRI2 = RI2.Text.ToLower();
if (lowerRI2.Contains("sos") || lowerRI2.Contains("war"))
   Response.Redirect("http://mydomain.com/rabat");
于 2012-07-24T08:46:47.593 回答