簡體   English   中英

c#使用類對象作為字典中的鍵

[英]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()

這有一些基本規則:

  • Bool :如果true則返回0,否則返回1
  • Byte ,char,short或int:返回類型的值
  • Long :return(int)(f ^ f(>>> 32))
  • Float :返回類型值的Convert.ToInt32
  • Object :返回通過調用object.GetHashCode()生成的值
  • 數組 :迭代所有數組並單獨處理每個元素

所以在你的情況下,你有x = int和y = double,如果你遵循這個規則,你會找到解決方案。

return x ^ y.GetHashCode();

您可以隨時添加花哨的數學算法,但要小心數字碰撞。

在您的情況下,您可以執行以下操作:

return x ^ y;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM