我有兩個對象是這樣的:相等,但不能互換
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