2

在 C# 中,有没有办法重载比较运算符,例如==,=<>在用户定义的对象上?

类似于你可以写"string"=="string"而不是"string".Equals("string")

我知道您可以定义 CompareTo 和 Equals 函数,但我想知道是否有快捷方式。

4

2 回答 2

5

==您可以通过在所需的中实现具有以下签名的函数来覆盖 C# 中的运算符class

public static bool operator ==(YourClass a, YourClass b) { }

这同样适用于<=>运算符。

通过覆盖,==您还必须覆盖!=,并且建议重载EqualsandGetHashcode函数。

有关更多信息,请阅读:

运算符重载教程

重载 Equals() 和运算符 == 的指南(C# 编程指南)

于 2012-11-15T21:45:32.503 回答
4

简单的例子:

class Foo
{
    public int Id { get; set; }

    public static bool operator ==(Foo first, Foo second)
    {
        return first.Id == second.Id;
    }

    public static bool operator !=(Foo first, Foo second)
    {
        return first.Id != second.Id;
    }
}

您还应该覆盖 Equals 和 GetHashCode

于 2012-11-15T21:51:41.300 回答