C#对象比较

时间:2012-11-15 21:44:02

标签: c#

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

类似于你如何写"string"=="string"而不是"string".Equals("string")

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

2 个答案:

答案 0 :(得分:5)

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

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

同样适用于<=>运营商。

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

有关详细信息,请阅读:

Operator Overloading Tutorial

Guidelines for Overloading Equals() and Operator == (C# Programming Guide)

答案 1 :(得分: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