2013-07-10 6 views
56

Come posso rendere insensibile la seguente distinzione tra maiuscole e minuscole?Come rendere String.Contains senza distinzione tra maiuscole e minuscole?

myString1.Contains("AbC") 
+1

o duplicato di articolo di MSDN per [String.Contains] (http: // MSDN. microsoft.com/en-us/library/dy85x1sa.aspx), che suggerisce di "Vedere anche: IndexOf" ... –

+0

Beh, questa domanda non è un -duplicate 100% se si chiede di risposte in VB.Net, poiché VB .Net ha caratteristiche che C# non ha, come l'operatore 'LIKE' che potrebbe essere usato qui. – sloth

+0

Ha taggato entrambe le lingue, quindi probabilmente non gli importa di quale sia la soluzione, quindi il duplicato risponde completamente a questa domanda. Ad ogni modo, se modifica la sua domanda con onlt vb.net, entrerà automaticamente nella coda di riapertura. – SysDragon

risposta

10
bool b = list.Contains("Hello", StringComparer.CurrentCultureIgnoreCase); 
codice

[EDIT] estensione:

public static bool Contains(this string source, string cont 
                , StringComparison compare) 
{ 
    return source.IndexOf(cont, compare) >= 0; 
} 

Questo potrebbe lavorare :)

+13

Questo metodo non è presente nello standard C# –

+1

Questo è il motivo della domanda ... Grazie @trippino – iGanja

+0

@trippino ha modificato la mia risposta con il codice di estensione – wudzik

39

È possibile utilizzare:

if (myString1.IndexOf("AbC", StringComparison.OrdinalIgnoreCase) >=0) { 
    //... 
} 

Questo funziona con qualsiasi versione di .NET .

+3

Due errori di battitura nella tua risposta, altrimenti buona ;-) dovrebbe essere (ovviamente) 'StringComparison.OrdinalIgnoreCase' – andreas

110

È possibile creare il proprio metodo di estensione per fare questo:

public static bool Contains(this string source, string toCheck, StringComparison comp) 
    { 
    return source != null && toCheck != null && source.IndexOf(toCheck, comp) >= 0; 
    } 

E quindi chiamare:

mystring.Contains(myStringToCheck, StringComparison.OrdinalIgnoreCase); 
+2

Questa è senza dubbio la migliore risposta avvolgendolo in un metodo di estensione. –

+6

@ Moo-Juice Sì, perché è familiare :) http://stackoverflow.com/a/444818/447156 –

+4

Suggerirei chiamando la funzione qualcosa di diverso da una corrispondenza esatta con qualcosa nel quadro, come le proprie iniziali + contiene. Io uso questo approccio per un sacco di cose. Le mie iniziali sono PS quindi ho psContains, psStartsWith, psEndsWith, ecc. La ragione per cui penso che dovrebbe essere diversa è che puoi dire, semplicemente leggendo il codice, che cosa farà. Inoltre, se le firme sono compatibili, potrebbe non piacere al compilatore. Se sono abbastanza compatibili, la compilazione non ti aiuterà a scoprire se le tue estensioni sono in gioco. Le estensioni sono un vero gioiello di Dotnet. Se usato correttamente :) –