在C#中,有没有办法在用户定义的对象上重载比较运算符,例如==
,=<
或>
?
类似于你如何写"string"=="string"
而不是"string".Equals("string")
我知道您可以定义CompareTo和Equals函数,但我想知道是否有快捷方式。
答案 0 :(得分:5)
您可以通过在所需的==
中实现具有以下签名的函数来覆盖C#中的class
运算符:
public static bool operator ==(YourClass a, YourClass b) { }
同样适用于<=
和>
运营商。
通过覆盖==
,您还必须覆盖!=
,并建议重载Equals
和GetHashcode
函数。
有关详细信息,请阅读:
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