如何重载==运算符的字符串?

时间:2018-12-11 19:52:59

标签: c# .net

为了进行不区分大小写的比较,如何覆盖==运算符的行为?

var areSame = "alex" == "ALex";

我希望areSame成为true

是否有一种方法可以重载/覆盖==运算符的行为以进行不区分大小写的比较?

2 个答案:

答案 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);