簡體   English   中英

IEqualityComparer給出錯誤的結果

[英]IEqualityComparer giving wrong result

這是我的測試代碼(包含應該返回的true):

HashSet<TilePosition> test = new HashSet<TilePosition>(new TilePositionCompare());
test.Add(new TilePosition(10,10));

if (test.Contains(new TilePosition(10,10)))
Debug.Log("We should see this");

我的比較類:使用System.Collections.Generic;

public class TilePositionCompare : IEqualityComparer<TilePosition>
{
    public bool Equals(TilePosition tileA, TilePosition tileB)
    {
        return tileA.PosX == tileB.PosX && tileA.PosY == tileB.PosY;
    }

    public int GetHashCode(TilePosition tile)
    {
        return tile.GetHashCode();
    }
}

這是我要比較的課程:

using System.Collections;
public class TilePosition
{
int posX;
int posY;

public TilePosition (int posX, int posY)
{
    this.posX = posX;
    this.posY = posY;
}
}

我不確定我要去哪里。 我遵循了一些看起來可能做同樣事情的教程。

GetHashCode()應該基於X / Y。

public class TilePositionCompare : IEqualityComparer<TilePosition>
{
    public bool Equals(TilePosition tileA, TilePosition tileB)
    {
        return tileA.PosX == tileB.PosX && tileA.PosY == tileB.PosY;
    }

    public int GetHashCode(TilePosition tile)
    {
        var hash = 17;
        hash = hash * 23 + tile.PosX.GetHashCode();
        hash = hash * 23 + tile.PosY.GetHashCode();
        return hash;
    }
}

來自https://stackoverflow.com/a/263416/70386的示例

要知道為什么使用奇數質數(17),請閱讀此處: 為什么Java的String中的hashCode()使用31作為乘數?

暫無
暫無

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

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