是否有一个C#区分大小写的等号运算符?
我知道以下区分大小写:
if (StringA == StringB) {
那么是否有一个运算符会以不敏感的方式比较两个string?
尝试这个:
string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);
通常情况下,有两种方法不区分大小写比较string:
- 缓慢的方法 :使用String.ToLower或更快的String.ToLowerInvariant方法将两个string转换为小写,并将结果string与“==”运算符进行比较
- 最快的方法 :使用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.Equals
或string.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()更快。