1、默认情况下,也就是不存在对==运算符的重载的情况下,==等价于Object.ReferenceEuqals。
2、即使两个对象的HashCode相同,这两个对象也可能是完全不同的对象。也就是说,
a.GetHashCode() == b.GetHashCode && Object.Equals( a, b ) == false
这个表达式也是有可能为真的,这是完全合理合法的。
综上所述,你的基础概念有问题,请回去把CLR via C#全文背诵。