3

私はこのような多くのコード行を持っています..これは私が今試していることの1つです。

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

この正規表現を試してください。

  • 比較で大文字と小文字を区別しない (SOSおよびsos一致)
  • 呼び出さないため、文字列を変更しません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

次のように、 1回の呼び出しを行うことができます

//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 ステートメントを 1 つ削除してから、linq any ステートメントを使用できます。

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

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

または、ターゲット URL への一致のコレクションを作成することもできます。

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

使用リンク

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

文字列を小文字または大文字に変換する代わりに、大文字と小文字を区別しないで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 に答える
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 に答える
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

1 つは大文字の検索文字列で、もう 1 つはリダイレクト先の文字列ペアのリストを作成します。

大文字のテキストに対して各検索文字列をチェックするリストを反復処理します。一致するものが見つかった場合は、ペアで指定された場所にリダイレクトします。

于 2012-07-24T08:40:15.460 に答える
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 に答える
0

正規表現を使用:

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