代码之家  ›  专栏  ›  技术社区  ›  Alex Gordon

如何重载字符串的==运算符?[关闭]

  •  -12
  • Alex Gordon  · 技术社区  · 6 年前

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

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

    我想要 areSame 成为 true

    是否有方法重载/重写 == 运算符进行不区分大小写的比较?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Abion47    6 年前

    不能为预先存在的类重写运算符。最接近的方法是生成一个扩展方法:

    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);
    
        2
  •  4
  •   Daniel A. White    6 年前

    你不能,但你可以用 StringComparer.OrdinalIgnoreCase.Equals(...) 或使用 StringComparer.CurrentCultureIgnoreCase (取决于您的需要)。

    如果您真的不想以一种重要的方式更改代码,请考虑将值包装在值对象模式中。可以将隐式转换添加到 System.String 但请提供所需的操作员。