![](/img/trans.png)
[英]How do you use an object reference as a key in a C# dictionary when the class implements Equals and GetHashCode?
[英]c# use a class object as a key in dictionary
我有一個看起來像這樣的課程。
public class Point : IEquatable<Point>
{
public int _xValue {get;set;}
public double _yValue {get;set;}
public Point(int x, double y)
{
_xValue = x;
_yValue = y;
}
public override bool Equals(object obj)
{
return Equals(obj as Point);
}
public bool Equals(Point obj)
{
return obj != null && obj._xValue == this._xValue && obj._yValue == this._yValue;
}
}
我必須實現GetHashCode
函數,以便我可以將它用作字典鍵。 但是我不清楚在這種情況下GetHashCode
函數必須返回什么。 有人可以幫我嗎?
它應返回一個整數,最好對於對象的每個單獨實例都是唯一的。 哈希值基本上是從對象內容創建的單個數字,用於唯一標識該對象。 第一條規則是,如果其中兩個點評估為彼此相等,則兩者的哈希值應相同。
MSDN提供了更詳細的描述
GetHashCode函數需要返回am整數,該整數將唯一地標識該對象的一個實例,以避免在將其用作字典中的鍵時發生沖突。
您應該能夠可靠地重現哈希碼,因此請盡量避免使用隨機值或日期值作為哈希碼的種子。
你可以做_xValue ^ _yValue.GetHashCode()
這有一些基本規則:
所以在你的情況下,你有x = int和y = double,如果你遵循這個規則,你會找到解決方案。
return x ^ y.GetHashCode();
您可以隨時添加花哨的數學算法,但要小心數字碰撞。
在您的情況下,您可以執行以下操作:
return x ^ y;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.