我知道以下内容是区分大小写的:
if (StringA == StringB) {
那么是否存在一个操作符,它会以不敏感的方式比较两个字符串?
试试这个:
string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase);
System.Collections.CaseInsensitiveComparer
或者
System.StringComparer.OrdinalIgnoreCase
运算符? 不,但我认为您可以更改区域性,以便字符串比较不区分大小写。
// you'll want to change this... System.Threading.Thread.CurrentThread.CurrentCulture // and you'll want to custimize this System.Globalization.CultureInfo.CompareInfo
我相信它会改变等于运算符比较字符串的方式。
string.Equals(StringA, StringB, StringComparison.CurrentCultureIgnoreCase);
if (StringA.ToUpperInvariant() == StringB.ToUpperInvariant()) {
人们报告说 ToUpperInvariable ()比 ToLowerInvari()快。
你可以用
if (stringA.equals(StringB, StringComparison.CurrentCultureIgnoreCase))
if (StringA.Equals(StringB, StringComparison.CurrentCultureIgnoreCase)) {
但是你需要确定 StringA 不是 null,所以你最好使用:
string.Equals(StringA , StringB, StringComparison.CurrentCultureIgnoreCase);
就像约翰建议的那样
修正了错误
string.Compare(string1, string2, true)
StringComparer静态类上有许多属性,它们可以返回比较器,以满足您可能需要的任何大小写敏感性:
StringComparer
StringComparer物业
比如,你可以打电话
StringComparer.CurrentCultureIgnoreCase.Equals(string1, string2)
StringComparer.CurrentCultureIgnoreCase.Compare(string1, string2)
它比使用 StringComparison参数的 string.Equals或 string.Compare重载要干净一些。
StringComparison
string.Equals
string.Compare
我非常习惯在这些比较方法的末尾输入: , StringComparison.
, StringComparison.
所以我延期了。
namespace System { public static class StringExtension { public static bool Equals(this string thisString, string compareString, StringComparison stringComparison) { return string.Equals(thisString, compareString, stringComparison); } } }
请注意,在调用 ext. 之前,您需要在 thisString上检查 null。
thisString
比较2个忽略大小写字母的字符串的最佳方法是使用 字符串,等于静态方法指定一个有序忽略大小写字符串比较。这也是最快的方法,比将字符串转换为大小写并在此之后进行比较要快得多。
我测试了这两种方法的性能,序数忽略大小写字符串比较是 超过9倍的速度!它也比将字符串转换为小写或大写更可靠(查看土耳其语 i 问题)。因此,始终使用 字符串,等于方法比较字符串是否相等:
String.Equals(string1, string2, StringComparison.OrdinalIgnoreCase);
如果要执行区域性特定的字符串比较,可以使用以下代码:
String.Equals(string1, string2, StringComparison.CurrentCultureIgnoreCase);
请注意,第二个示例使用当前区域性的字符串比较逻辑,这使得它比第一个示例中的“有序忽略大小写”比较慢,所以如果您不需要任何特定于区域性的字符串比较逻辑,并且您已经达到了最大性能,那么使用“有序忽略大小写”比较。
了解更多信息,请登录 在我的博客上看完整的故事。
其他的答案在这里是完全有效的,但是输入 StringComparison.OrdinalIgnoreCase和使用 String.Compare需要一些时间。
StringComparison.OrdinalIgnoreCase
String.Compare
我编写了一个简单的 String 扩展方法,你可以在这里指定比较是区分大小写还是无区分大小写:
Https://stackoverflow.com/a/49208128/2338477
这里有一个简化语法的想法:
public class IgnoreCase { private readonly string _value; public IgnoreCase(string s) { _value = s; } protected bool Equals(IgnoreCase other) { return this == other; } public override bool Equals(object obj) { return obj != null && (ReferenceEquals(this, obj) || (obj.GetType() == GetType() && this == (IgnoreCase) obj)); } public override int GetHashCode() { return _value?.GetHashCode() ?? 0; } public static bool operator ==(IgnoreCase a, IgnoreCase b) { return string.Equals(a, b, StringComparison.OrdinalIgnoreCase); } public static bool operator !=(IgnoreCase a, IgnoreCase b) { return !(a == b); } public static implicit operator string(IgnoreCase s) { return s._value; } public static implicit operator IgnoreCase(string s) { return new IgnoreCase(s); } }
适用范围:
Console.WriteLine((IgnoreCase) "a" == "b"); // false Console.WriteLine((IgnoreCase) "abc" == "abC"); // true Console.WriteLine((IgnoreCase) "Abc" == "aBc"); // true Console.WriteLine((IgnoreCase) "ABC" == "ABC"); // true
//您可以通过以下方法使其不区分大小写 = = s2.ToLower () ;