2013-03-02 87 views
10

我正在開發一個C#4.5應用程序,我需要一個函數來進行下面的比較返回true:情結 「包含」 字符串比較

「BLALéOnArd/O喇嘛」 .ComplexContains( 「達芬奇」 )

換句話說,我需要string.Compare(str1, str2, CultureInfo.InvariantCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols | CompareOptions.IgnoreNonSpace)還需要檢查「載!

誰能幫助?

回答

22

你可以使用一個approp ri CompareInfo然後CompareInfo.IndexOf(string, string, CompareOptions)並檢查結果對-1。示例:

using System; 
using System.Globalization; 

class Program 
{ 
    static void Main() 
    { 
     var compareInfo = CultureInfo.InvariantCulture.CompareInfo; 
     var options = CompareOptions.IgnoreCase | 
      CompareOptions.IgnoreSymbols | 
      CompareOptions.IgnoreNonSpace; 

     var haystack = "bla Lé OnAr d/o bla"; 
     var needle = "leonardo"; 

     var index = compareInfo.IndexOf(haystack, needle, options); 
     Console.WriteLine(index); // 4 
    } 
} 

還是在方法形式:

private static bool ComplexContains(string source, string value) 
{ 
    var index = CultureInfo.InvariantCulture.CompareInfo.IndexOf 
     (source, value, CompareOptions.IgnoreCase | 
     CompareOptions.IgnoreSymbols | CompareOptions.IgnoreNonSpace); 
    return index != -1; 
} 
+1

+1的草垛和針。 :) – publicgk 2013-03-02 20:28:22

+0

+1快速問題,雖然... EF5如何很好地轉換到TSQL?即時通訊在這裏使用LINQ ... – Leonardo 2013-03-02 20:47:48

+1

@Leonardo:我非常懷疑它處理的是 - 我不會指望它。 (未來,請在原始問題中給出*關鍵*這樣的細節。) – 2013-03-02 20:50:26