如果您查看相应的参考来源
https://referencesource.microsoft.com/#mscorlib/system/string.cs,bda3b2c94b5251ce https://referencesource.microsoft.com/#mscorlib/system/string.cs,bda3b2c94b5251ce
public static int Compare(String strA, String strB, bool ignoreCase)
{
if (ignoreCase) {
return CultureInfo.CurrentCulture.CompareInfo.Compare(strA, strB, CompareOptions.IgnoreCase);
}
return CultureInfo.CurrentCulture.CompareInfo.Compare(strA, strB, CompareOptions.None);
}
https://referencesource.microsoft.com/#mscorlib/system/string.cs,0be9474bc8e160b6 https://referencesource.microsoft.com/#mscorlib/system/string.cs,0be9474bc8e160b6
public static int Compare(String strA, String strB, StringComparison comparisonType)
{
...
// Agrument validation, reference equality, null test
switch (comparisonType) {
...
case StringComparison.CurrentCultureIgnoreCase:
return CultureInfo.CurrentCulture.CompareInfo.Compare(strA, strB, CompareOptions.IgnoreCase);
https://referencesource.microsoft.com/#mscorlib/system/string.cs,d47c1f57ad1e1e6e https://referencesource.microsoft.com/#mscorlib/system/string.cs,d47c1f57ad1e1e6e
public static bool Equals(String a, String b, StringComparison comparisonType) {
...
// Agrument validation, reference equality, null test
switch (comparisonType) {
...
case StringComparison.CurrentCultureIgnoreCase:
return (CultureInfo.CurrentCulture.CompareInfo.Compare(a, b, CompareOptions.None) == 0);
你会发现这三种方法是equal另一个。至于其他方式,Regex.IsMatch
绝对是一个超调(您所要做的就是比较字符串);ToLower()
处理特定于文化的字母时可能会很棘手,请参阅
https://en.wikipedia.org/wiki/Dotted_and_dotless_I https://en.wikipedia.org/wiki/Dotted_and_dotless_I
这就是为什么更好的设计是声明你的意图clearly(=我想比较字符串)然后屏蔽(然后让系统欺骗你)