2012-02-01 14 views

risposta

16

Da MSDN:

string.CompareTo:

confronta questo esempio con un oggetto specificato o stringa e restituisce una intero che indica se questa istanza precede, segue o appare nella stessa posizione nell'ordine di ordinamento dell'oggetto specificato o stringa.

string.Equals:

determina se due oggetti String hanno lo stesso valore.

In breve, CompareTo viene utilizzato per l'ordinamento. Equals viene utilizzato per determinare l'uguaglianza.

14

CompareTo() indica quale e se uno è maggiore/minore dell'altro, mentre Equals() indica semplicemente se sono valori equivalenti.

Se tutto ciò che si desidera sapere è "sono gli stessi valori", si utilizza Equals(). Se avete bisogno di sapere anche come si confronta, usare CompareTo()

int a = 50; 
int b = 10; 

//if you need to know if they are equal: 
if(a.Equals(b)){ 
    //won't execute 
} 

//this would check if they are equal, as well 
if(a.CompareTo(b) == 0){ 
    //won't execute 
} 

//if you need to know if a is bigger than b, specifically: 
if(a.CompareTo(b) > 0){ 
    //will execute 
} 

//this would check to see if a is less than b 
if(a.CompareTo(b) < 0){ 
    //won't execute 
} 

Infine, ricordiamo che questi Equals() e CompareTo() metodi non sono strettamente necessari per i tipi primitivi come int, perché gli operatori di confronto standard sono sovraccaricati, in modo che si possa fare questi:

//this would check if they are equal, as well 
if(a == b){ 
    //won't execute 
} 

//if you need to know if a is bigger than b, specifically: 
if(a > b){ 
    //will execute 
} 

//this would check to see if a is less than b 
if(a < b){ 
    //won't execute 
} 

Infine, è citato string nella sua interrogazione. Equals() e CompareTo() funzionano come ho descritto per string pure. Basta tenere a mente il 'confronto' che CompareTo() fa sulle stringhe si basa su ordinamento alfabetico, in modo "abcdefg" < "z"

+0

thx! quindi se vogliamo solo vedere se sono gli stessi valori, usare Equals() andrà meglio di CompareTo()? Cosa da l'avv. di usare Equals? –

+2

Ci * potrebbe * essere una piccola differenza di prestazioni, immagino. Se hai solo bisogno di conoscere l'uguaglianza, sì; usa 'Equals()'. È anche più chiaro nel tuo codice verificare 'a.Equals (b)' di 'a.CompareTo (b) == 0' –

+1

Il vero vantaggio è che non gli oggetti forniscono un metodo' CompareTo'. 'Equals' sarà sempre lì, dato che è fornito dalla classe base' Object'. –

4

Equals restituirà un valore booleano per l'uguaglianza.

CompareTo restituirà un valore int, con -1 (o qualsiasi altro valore negativo) per "minore di", 0 per "uguale" o 1 (o qualsiasi altro valore positivo) per "maggiore di". Questo metodo è utile per l'ordinamento degli algoritmi.

5

La funzionalità in CompareTo è in realtà un superset di funzionalità di Equals. Una funzione CompareTo detta l'ordine, prima, dopo o uguale mentre la funzione Equals impone semplicemente l'uguaglianza. Quindi è effettivamente possibile definire Equals in termini di CompareTo

public bool Equals(string other) { 
    return 0 == CompareTo(other); 
} 
+0

Anche se un caso comune, questo non è sempre il caso. Un esempio tipico è dove 'CompareTo()' controlla solo il nome di un oggetto per determinare l'ordine mentre 'Equals()' potrebbe controllare anche altri campi. Da [MSDN] (http://msdn.microsoft.com/en-us/library/system.icomparable (v = vs.110) .aspx): "Questa istanza corrente si verifica nella stessa posizione nell'ordinamento come oggetto specificato dal metodo CompareTo. " - non dice che l'oggetto è uguale. – larsmoa

0

Il metodo CompareTo sta confrontando l'istanza dell'oggetto con il parametro dell'oggetto String. Il metodo uguale determina il valore di entrambi sono uguali o meno.

CompareTo deve essere utilizzato quando si confrontano i valori di due oggetti.

String str1 = "abc"; 
String str2 = "def" 
if(strq.CompareTo(str2) // 

Eguali dovrebbero essere utilizzate quando uno o entrambi non sono oggetti.

string str1 = "abc"; 
if(str1.Equals("abc") // 

Se si utilizza il metodo CompareTo per le normali variabili di tipo valore, verrà utilizzato il tipo cast (pugilato), che non è necessario.

0

L'uguaglianza può essere "più faticosa" del confronto, ma non viceversa. CompareTo può dire “Tutti gli oggetti sono uguali” mentre Equals dice “ma alcuni sono più uguali degli altri!”

Un esempio di questo è System.String. Il metodo String's Equals e l'operatore == utilizzano il confronto ordinale, che confronta i valori in punti Unicode di ciascun carattere. Il suo metodo CompareTo, tuttavia, utilizza un confronto dipendente dalla cultura meno pignolo. Su la maggior parte dei computer, ad esempio, le stringhe "ṻ" e "ǖ" sono diverse in base a Uguali, ma lo stesso secondo CompareTo.

Questo da C# in a nutshell

Problemi correlati