【发布时间】:2012-05-17 21:24:59
【问题描述】:
可能重复:
Why is it important to override GetHashCode when Equals method is overriden in C#?
我没有实现 Object 类的 GetHashCode 方法。所以我收到了一些警告。
有没有一种方法来检查相等性,我只检查 Equals 方法中的哈希码,因此同时实现 Equals 和 GetHashCode 而不会收到“Object.GetHashCode 未实现警告?”。
如果我只实现 Equals 而没有实现 GetHashCode 会发生什么? myclass 的实例在我的应用程序中是可更新的。
public class MyClass{
private string x;
private string y;
public override bool Equals(object obj)
{
try
{
return Object.Equals(this.x, obj.x)
&& Object.Equals(this.y, obj.y);
}
catch(Exception Ex)
{
log.Debug(Ex.StackTrace);
throw;
}
}
}
【问题讨论】:
-
stackoverflow.com/questions/371328/… 回答最多吗?全部?这个的?可能重复?
-
顺便说一句,
Equals的实现太过分了;只需return this.x == other.x && this.y == other.y; -
我来自 Java 世界。在 Java 中,我将引用与 == 进行了比较。尽管字符串在 c# 中是引用类型,但它们可以像值类型一样使用(使用 == 运算符),不像在 Java 中我会将值相等性与 str1.Equals(str2) 进行比较。特别是在这种情况下,如果我使用 this.str1 == this.str2 - 并且 str1 为 null,我想我会得到一个 NULL 指针异常?
标签: c#