Se sei sempre curioso delle differenze nei metodi BCL, Reflector è tuo amico :-)
Seguo queste linee guida:
Corrispondenza esatta: EDIT: in precedenza avevo sempre utilizzato l'operatore == in base al principio che all'interno di Equals (stringa, stringa) l'operatore object == viene utilizzato per confrontare i riferimenti dell'oggetto ma sembra strA.Equals (strB) è ancora 1-11% più veloce complessivo di string.Equals (strA, strB), strA == strB e string.CompareOrdinal (strA, strB). Ho testato in loop con un StopWatch su valori di stringa sia interni / non interni, con lunghezze di stringa uguali / diverse e dimensioni variabili (da 1B a 5 MB).
strA.Equals(strB)
Partita leggibile dall'uomo (culture occidentali, senza distinzione tra maiuscole e minuscole):
string.Compare(strA, strB, StringComparison.OrdinalIgnoreCase) == 0
Corrispondenza leggibile dall'uomo (Tutte le altre culture, maiuscole / minuscole / accento / kana / ecc definite da CultureInfo):
string.Compare(strA, strB, myCultureInfo) == 0
Partita leggibile dall'uomo con regole personalizzate (tutte le altre culture):
CompareOptions compareOptions = CompareOptions.IgnoreCase
| CompareOptions.IgnoreWidth
| CompareOptions.IgnoreNonSpace;
string.Compare(strA, strB, CultureInfo.CurrentCulture, compareOptions) == 0