Se você estiver curioso sobre as diferenças nos métodos BCL, o Reflector é seu amigo :-)
Eu sigo estas diretrizes:
Correspondência exata: EDIT: Eu sempre usei o operador == com o princípio de que dentro de Equals (string, string) o operador object == é usado para comparar as referências do objeto, mas parece que strA.Equals (strB) ainda é de 1 a 11% geral mais rápido que string.Equals (strA, strB), strA == strB e string.CompareOrdinal (strA, strB). Fiz um loop testado com um StopWatch em valores de sequência internos / não internos, com comprimentos de sequência iguais / diferentes e tamanhos variados (1B a 5MB).
strA.Equals(strB)
Correspondência legível por humanos (culturas ocidentais, sem distinção entre maiúsculas e minúsculas):
string.Compare(strA, strB, StringComparison.OrdinalIgnoreCase) == 0
Correspondência legível por humanos (todas as outras culturas, maiúsculas / minúsculas / sotaque / kana / etc definidas por CultureInfo):
string.Compare(strA, strB, myCultureInfo) == 0
Correspondência legível por humanos com regras personalizadas (todas as outras culturas):
CompareOptions compareOptions = CompareOptions.IgnoreCase
| CompareOptions.IgnoreWidth
| CompareOptions.IgnoreNonSpace;
string.Compare(strA, strB, CultureInfo.CurrentCulture, compareOptions) == 0