2012-11-15 174 views
2

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

哟怎么能写"string"=="string"而不是"string".Equals("string")

我知道你可以定义的CompareTo和equals功能,但我不知道是否有一个快捷方式类似。

+0

的可能重复[如何最好的实现等于定制ty pes?](http://stackoverflow.com/questions/567642/how-to-best-implement-equals-for-custom-types) – NotMe

+0

建议的副本显然不是这个问题的重复;他问的是如何重载操作符,而不是它们的明智实现。 – Servy

+0

您可以随时为您的班级[重载操作员](http://msdn.microsoft.com/en-us/library/aa288467%28v=vs.71%29.aspx)。 –

回答

5

您可以通过在所需class实施具有以下签名的功能覆盖==运营商在C#:

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

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

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

欲了解更多信息,请阅读:

Operator Overloading Tutorial

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

+0

链接仅堆栈溢出时认为不可接受的答案。如果您要发布链接到内容,您还应该解释链接,引用相关部分,或者总结足够的内容,以便问题完全在您的帖子中得到解答,并且链接只是可选的,而不是必需的看到解决方案。 – Servy

+0

@Servy谢谢!我不知道。我会弥补的! – LMB

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