Якщо вам коли-небудь цікаво розбіжності в методах BCL, Reflector - ваш друг :-)
Я дотримуюся цих рекомендацій:
Точна відповідність: EDIT: Я раніше завжди використовував оператор == за принципом, що всередині рівняння (строка, рядок) оператор object == використовується для порівняння посилань на об'єкт, але здається, що strA.Equals (strB) все ще становить 1-11% швидше в цілому, ніж string.Equals (strA, strB), strA == strB та string.CompareOrdinal (strA, strB). Я перевіряю цикл за допомогою секундоміра на значення інтернованих / не інтернованих рядків, з однаковою / різною довжиною рядка та різними розмірами (від 1В до 5 МБ).
strA.Equals(strB)
Людина, що читається (західні культури, нечутливі до регістру):
string.Compare(strA, strB, StringComparison.OrdinalIgnoreCase) == 0
Людина, що читається (усі інші культури, нечутливий випадок / акцент / кана / тощо, визначені CultureInfo):
string.Compare(strA, strB, myCultureInfo) == 0
Людина, що читається, відповідає специфічним правилам (Усі інші культури):
CompareOptions compareOptions = CompareOptions.IgnoreCase
| CompareOptions.IgnoreWidth
| CompareOptions.IgnoreNonSpace;
string.Compare(strA, strB, CultureInfo.CurrentCulture, compareOptions) == 0