为了进行不区分大小写的比较,如何覆盖==运算符的行为?
var areSame = "alex" == "ALex";
我希望areSame
成为true
是否有一种方法可以重载/覆盖==
运算符的行为以进行不区分大小写的比较?
答案 0 :(得分:4)
您不能,但是可以使用StringComparer.OrdinalIgnoreCase.Equals(...)
或StringComparer.CurrentCultureIgnoreCase
(取决于您的需要)。
如果您真的不想以重大方式更改代码,请考虑将值包装在值对象模式中。您可以将隐式转换添加到System.String
,但提供所需的运算符。
答案 1 :(得分:3)
您不能覆盖已有类的运算符。您可以获得的最接近的方法是创建一个扩展方法:
public static bool EqualsCaseInsensitive(this String a, String b) {
return String.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
您可以像这样使用它:
var areSame = stringA.EqualsCaseInsensitive(stringB);
话虽如此,将扩展方法添加到诸如String
之类的核心类型被认为是不好的做法。您最好只使用实用程序方法进行比较。在这种特殊情况下,您所需的实用程序方法已经存在:
var areSame = String.Equals(stringA, stringB, StringComparison.OrdinalIgnoreCase);