我有一個由兩個字符串和一個枚舉組成的類。我試圖將這個類的實例用作字典中的鍵。不幸的是,我似乎沒有正確實施IEquatable。以下是我如何做到這一點:IEquatable的類實現用作字典中的鍵
public enum CoinSide
{
Heads,
Tails
}
public class CoinDetails : IComparable, IEquatable<CoinDetails>
{
private string denomination;
private string design;
private CoinSide side;
//...
public int GetHashCode(CoinDetails obj)
{
return string.Concat(obj.Denomination, obj.Design, obj.Side.ToString()).GetHashCode();
}
public bool Equals(CoinDetails other)
{
return (this.Denomination == other.Denomination && this.Design == other.Design && this.Side == other.Side);
}
}
但是,我仍然無法在我的字典中查找項目。此外,以下測試失敗:
[TestMethod]
public void CoinDetailsHashCode()
{
CoinDetails a = new CoinDetails("1POUND", "1997", CoinSide.Heads);
CoinDetails b = new CoinDetails("1POUND", "1997", CoinSide.Heads);
Assert.AreEqual(a.GetHashCode(), b.GetHashCode());
}
[TestMethod]
public void CoinDetailsCompareForEquality()
{
CoinDetails a = new CoinDetails("1POUND", "1997", CoinSide.Heads);
CoinDetails b = new CoinDetails("1POUND", "1997", CoinSide.Heads);
Assert.AreEqual<CoinDetails>(a, b);
}
有人能夠指出我要去哪裏錯了嗎?我確信我錯過了一些相當簡單的事情,但我不確定是什麼。
您還沒有覆蓋'布爾等於(對象)'這大概就是爲什麼測試失敗。儘管如此,我希望字典可以。如果您可以顯示一個簡短但完整的程序來演示問題,那將會有所幫助。 –