我有两个对象是这样的:相等,但不能互换
class Container {
public HashSet<Item> Items { get; }
}
class Item {
public Container Parent { get; set; }
public string Value1 { get; set; }
public int Value2 { get; set; }
}
每个Item
实例必须属于Container
实例,并且在两者之间的一个一对多的关系,始终是两端保持同步。
我现在面临实施一种方法,比较Item
的两个实例,看他们的Value1
和Value2
值是否匹配。方法将而不是考虑到Parent
值,因为我比较的每对实例在这个值上肯定不同,所以这样做会使得我实现的方法无用,因为它将具有与object.ReferenceEquals
相同的结果(false
)方法。
我的问题如下。我是否应该将此方法作为对象的public override bool Equals(object obj)
方法(以及GetHashCode
)来实现?或者它忽略了它的属性排除了我这样做的事实?为什么或者为什么不?我的另一个想法是将其实施为public bool EqualsIgnoreParent(Item other)
,它不会覆盖任何东西;然后我可以从自定义比较器中调用它。
当你将一个可变对象放在一个'HashSet'中时,它会产生一种混乱,因为正确操作哈希代码一旦被添加到该集合后就不能改变。 –
我更喜欢为可变对象实现一个'IEqualityComparer'而不是覆盖'Equals'。 – CodesInChaos
@CodesInChaos是的,这就是我所做的。请参阅下面的答案。 – HappyNomad