如果您对 BCL 方法的差异感到好奇,Reflector是您的朋友 :-)
我遵循以下准则:
完全匹配: 编辑:我以前一直使用 == 运算符,其原则是在 Equals(string, string) 内部,对象 == 运算符用于比较对象引用,但似乎 strA.Equals(strB) 仍然是 1-11%总体上比 string.Equals(strA, strB)、strA == strB 和 string.CompareOrdinal(strA, strB) 更快。我使用 StopWatch 对实习/非实习字符串值进行了循环测试,字符串长度相同/不同,大小不同(1B 到 5MB)。
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