在C#中,有没有办法在用户定义的对象上重载比较运算符,如==
,=<
或>
?C#对象比较
哟怎么能写"string"=="string"
而不是"string".Equals("string")
我知道你可以定义的CompareTo和equals功能,但我不知道是否有一个快捷方式类似。
在C#中,有没有办法在用户定义的对象上重载比较运算符,如==
,=<
或>
?C#对象比较
哟怎么能写"string"=="string"
而不是"string".Equals("string")
我知道你可以定义的CompareTo和equals功能,但我不知道是否有一个快捷方式类似。
您可以通过在所需class
实施具有以下签名的功能覆盖==
运营商在C#:
public static bool operator ==(YourClass a, YourClass b) { }
这同样适用于<=
和>
运营商。
通过重写==
您还必须覆盖!=
,并且建议将Equals
和GetHashcode
函数过载。
欲了解更多信息,请阅读:
Guidelines for Overloading Equals() and Operator == (C# Programming Guide)
简单的例子:
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
的可能重复[如何最好的实现等于定制ty pes?](http://stackoverflow.com/questions/567642/how-to-best-implement-equals-for-custom-types) – NotMe
建议的副本显然不是这个问题的重复;他问的是如何重载操作符,而不是它们的明智实现。 – Servy
您可以随时为您的班级[重载操作员](http://msdn.microsoft.com/en-us/library/aa288467%28v=vs.71%29.aspx)。 –