是否有一个C#区分大小写的等号运算符?

我知道以下区分大小写:

if (StringA == StringB) { 

那么是否有一个运算符会以不敏感的方式比较两个string?

尝试这个:

 string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase); 

通常情况下,有两种方法不区分大小写比较string:

  1. 缓慢的方法 :使用String.ToLower或更快的String.ToLowerInvariant方法将两个string转换为小写,并将结果string与“==”运算符进行比较
  2. 最快的方法 :使用String.Equals静态方法指定序号忽略大小写string比较。

我testing了两种方法的性能,第二个(序号忽略大小写string比较)的速度提高了9倍以上 ! 所以在可能的时候总是使用String.Equals方法:

 String.Equals(string1, string2, StringComparison.OrdinalIgnoreCase); 

如果你想执行文化特定的string比较,你可以使用下面的代码:

 String.Equals(string1, string2, StringComparison.CurrentCultureIgnoreCase); 

请注意,这个调用使用当前文化的string比较逻辑,这使得它比上面显示的“序号忽略大小写”比较慢,所以如果你不需要任何文化特定的string比较逻辑,并且你是在最大性能,使用“序号忽略情况”比较。

欲了解更多信息,请阅读我博客上的全文 。

StringComparer静态类上有许多属性可以用来返回任何types的大小写敏感的比较器:

StringComparer属性

例如,你可以打电话

 StringComparer.CurrentCultureIgnoreCase.Equals(string1, string2) 

要么

 StringComparer.CurrentCultureIgnoreCase.Compare(string1, string2) 

它比string.Equalsstring.Compare更重要一点,它带有一个StringComparison参数。

 System.Collections.CaseInsensitiveComparer 

要么

 System.StringComparer.OrdinalIgnoreCase 
 string.Equals(StringA, StringB, StringComparison.CurrentCultureIgnoreCase); 

要么

 if (StringA.Equals(StringB, StringComparison.CurrentCultureIgnoreCase)) { 

但是你需要确保StringA不是null。 所以可能更好的使用:

 string.Equals(StringA , StringB, StringComparison.CurrentCultureIgnoreCase); 

正如John所build议的

编辑:纠正了错误

操作? 不,但我认为你可以改变你的文化,使string比较不区分大小写。

 // you'll want to change this... System.Threading.Thread.CurrentThread.CurrentCulture // and you'll want to custimize this System.Globalization.CultureInfo.CompareInfo 

我相信它会改变string被等号运算符比较的方式。

您可以使用

 if (stringA.equals(StringB, StringComparison.CurrentCultureIgnoreCase)) 

我习惯于在这些比较方法的末尾input: , StringComparison.

所以我做了一个扩展。

 namespace System { public static class StringExtension { public static bool Equals(this string thisString, string compareString, StringComparison stringComparison) { return string.Equals(thisString, compareString, stringComparison); } } } 

请注意,在调用分机之前,您需要在thisString上检查null。

 string.Compare(string1, string2, true) 
 if (StringA.ToUpperInvariant() == StringB.ToUpperInvariant()) { 

人员报告ToUpperInvariant()比ToLowerInvariant()更快。