c#是否存在与Java with equals和gethashcode()相同的问题?
c#是否存在与Java的equals和gethashcode相同的问题c#是否存在与Java with equals和gethashcode()相同的问题?,c#,java,equals,gethashcode,C#,Java,Equals,Gethashcode,c#是否存在与Java的equals和gethashcode相同的问题 像这样的问题:因为你有点含糊不清,所以不确定你在谈论哪些问题 但是,如果您的意思是当您重写Equals时,您应该(如果您不希望编译器警告,或者代码中可能出现意外行为)重写GetHashCode,那么是的。如果您的意思是在继承方面很难定义相等,那么是的 但是,.NET有IEqualityComparer接口,该接口经常用于相等和散列-用于字典等容器。框架中几乎所有需要相等/散列的内容都允许行为由IEqualityCompare
像这样的问题:因为你有点含糊不清,所以不确定你在谈论哪些问题
但是,如果您的意思是当您重写
Equals
时,您应该(如果您不希望编译器警告,或者代码中可能出现意外行为)重写GetHashCode
,那么是的。如果您的意思是在继承方面很难定义相等,那么是的
但是,.NET有
IEqualityComparer
接口,该接口经常用于相等和散列-用于字典
等容器。框架中几乎所有需要相等/散列的内容都允许行为由IEqualityComparer
指定,这意味着您可以表达任何您想要的相等概念,如果类型本身给出的形式不适合您的需要。您可能希望更明确一点。你指的是什么问题?取决于你所说的问题。Java的equals和getHashCode有什么问题吗?比如:@Blankman:Right-所以基本上你想要两个不同的平等概念;一个按ID,一个按各个字段。这正是IEqualityComparer
的用途。那么集合使用IEqualityComparer?如果是,它似乎比Java更健壮。@Blankman:是的,像HashSet
这样的东西允许您在创建自定义比较器时指定它们。