我需要知道使用哈希码比较许多对象的方法。所以这是其中的一课。
public class Test: IEquatable<Test>
{
public Test()
{
}
public string ID { get; set; }
public string Name{ get; set; }
public static int SafeGetHashCode<T>(this T value) where T : class
{
return value == null ? 0 : value.GetHashCode();
}
public override int GetHashCode()
{
int hash = 19;
hash = hash * 31 + ID.SafeGetHashCode();
hash = hash * 31 + Name.SafeGetHashCode();
return hash;
}
public override bool isSame(object obj)
{
// compare objects here
}
}
但是有2个错误。两者都是一样的。
“string”不包含“SafeGetHashCode”的定义,并且找不到接受“string”类型的第一个参数的扩展方法“SafeGetHashCode”(您是否缺少 using 指令或程序集引用?)
而对于isSame(),我不知道怎么写代码。概念是比较所有对象,如果有 2 个相同的 ID 和名称,将它们组合在一起。
Item A = new Item();
Item B = new Item();
Item c = new Item();
A.ID = "Exam1";
A.Name = "Apple";
B.ID = "Exam1";
B.Name = "Orange";
C.ID = "Exam1";
C.Name = "Apple";
所以项目 A 和 C 将组合在一起。