2009-09-01 20 views

risposta

21

Sì, le funzioni di stringa sono sensibili alla distinzione tra maiuscole e minuscole. In genere hanno un sovraccarico che consente di indicare il tipo di confronto di stringhe desiderato. Questo vale anche per IndexOf. Per ottenere l'indice della stringa, in maniera case-insensitive, si può fare: confronti di stringhe

string blaBlah = "blaBlah"; 
int idx = blaBlah.IndexOf("blah", StringComparison.OrdinalIgnoreCase); 
+1

C# è case stricly sensibile, ma in VB.NET, è possibile utilizzare OPTION COMPARE TEXT per forzare un confronto non sensibile al maiuscolo/minuscolo. L'impostazione predefinita in VB.NET è BINARY, quindi si comporta come C#. –

+1

Anche così, "Confronta Opzione" si applica solo agli operatori di confronto VB come '=' e 'Mi piace' - non influenzerà alcun metodo di' String', né qualsiasi altra funzione di stringa FCL. –

1

NET sono infatti tra maiuscole e minuscole. Potresti usare cose come ToUpper() per normalizzare le cose prima di confrontarle.

+0

Un'altra opzione potrebbe essere: CultureInfo.CurrentCulture.CompareInfo.IndexOf (source, value, CompareOptions.IgnoreCase) –

+0

Fai attenzione alle culture, o potresti trovare improvvisamente il paragone che non funziona su un sistema turco - in turco, ho maiuscolo su İ. –

+3

utilizzando ToUpper o ToLower è una cattiva idea poiché richiederebbe l'inizializzazione di un nuovo oggetto (non valido per le prestazioni) tutti i metodi di confronto delle stringhe prendono un argomento StringComparison o un argomento IComparer in uno degli overloads utilizzando uno di quelli che verranno eseguiti ToUpper /Ridurre –

0

Come impostazione predefinita sono case sensitive ma la maggior parte di esse (se non tutte) include IndexOf ha un overload che accetta un argomento StringComparison. Per esempio. se si passa

StringComparison.InvariantCultureIgnoreCase 

come argomento StringComparison per indexOf sarà (come dice il nome) ignorare le differenze di casi

11

Una cosa che vorrei aggiungere alle risposte esistenti (da quando eri originariamente chiedendo di ASP.NET):

Alcune collezioni nome/valore, come Request.QueryString e probabilmente anche Request.Form non fanno distinzione tra maiuscole e minuscole. Per esempio, se ci si dirige verso una pagina ASPX utilizzando il seguente URL

http://server/mypage.aspx?user=admin 

poi entrambe le seguenti linee torneranno "admin":

var user1 = Request.QueryString["user"]; 
var user2 = Request.QueryString["USER"]; 
Problemi correlati