我試圖比較Definition
類型的兩個哈希集作爲EqualityComparer<T>.Default.Equals(value, oldValue)
。 Definition
定義如下檢查對象的HashSet是否相等
public class Definition
{
public string Variable { get; set; }
public HashSet<Location> LocationList { get; set; }
public override bool Equals(object obj)
{
Definition other = obj as Definition;
return other.Variable.Equals(this.Variable) && other.LocationList!= null &&this.LocationList != null
&& other.LocationList.Count == this.LocationList.Count
&& other.LocationList == this.LocationList;
}
public override int GetHashCode()
{
return this.Variable.GetHashCode()^this.LocationList.Count.GetHashCode();//^this.LocationList.GetHashCode();
}
}
public class Location
{
public int Line { get; set; }
public int Column { get; set; }
public int Position { get; set; }
public string CodeTab { get; set; }
public Location(int line, int col, int pos, string tab)
{
Line = line;
Column = col;
Position = pos;
CodeTab = tab;
}
public override bool Equals(object obj)
{
Location other = obj as Location;
return this.CodeTab == other.CodeTab
&& this.Position == other.Position
&& this.Column == other.Column
&& this.Line == other.Line;
}
public override int GetHashCode()
{
return this.CodeTab.GetHashCode()^this.Position.GetHashCode()
^this.Column.GetHashCode()^this.Line.GetHashCode();
}
}
不知何故對於類似的一組,其結果是,儘管保持相同的所有信息返回false
。唯一的區別是某些元素的位置互換,但我知道HashSet
在比較時不會保留或檢查順序。任何人都可以告訴我這裏出了什麼問題嗎?
PS:我試着取消註釋this.LocationList.GetHashCode()
也沒有工作。
這是一個'HashSet的'不是'HashSet的'但你的狀態,你想比較_「定義的兩個哈希集」_。所以你的問題要麼是錯誤的,要麼是你的代碼做了一些不同的事情。 –
'value'和'oldValue'是'Definition'類型。 – Sreeja