2013-03-02 11 views
10

Sto sviluppando un'applicazione C# 4.5 e ho bisogno di una funzione per restituire vero per il seguente confronto:Complex "contiene" il confronto tra stringhe

"bla leonar d/o bla" .ComplexContains ("Leonardo")

In altre parole, ho bisogno string.Compare(str1, str2, CultureInfo.InvariantCulture, CompareOptions.IgnoreCase | CompareOptions.IgnoreSymbols | CompareOptions.IgnoreNonSpace) di controllare anche per "contiene!

qualcuno può aiutarmi?

risposta

22

Si potrebbe usare un approp riate CompareInfo e poi CompareInfo.IndexOf(string, string, CompareOptions) e controllare il risultato con -1. Esempio:

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 
    } 
} 

o in forma di metodo:

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 per pagliaio e ago. :) – publicgk

+0

+1 una domanda veloce però ... quanto bene EF5 trasforma questo in TSql? sto usando LINQ qui ... – Leonardo

+1

@Leonardo: dubito fortemente che lo gestisca a tutti - non me lo aspetterei. (In futuro, per favore, fornisci * cruciali * i dettagli come questo nella domanda originale). –

Problemi correlati