2014-10-05 58 views
-2

我在我的c#項目中使用字典進行數據存儲。C#詞典:丟失數據

問題是在幾個小時內我的字典丟失了一些數據。 爲什麼?

public Dictionary<string, AgentHistory> ConnectRequestHistory = new Dictionary<string, AgentHistory>(); //IP - History 

public Dictionary<AgentPlayerObject, AgentPlayerData> PlayerDataList = new Dictionary<AgentPlayerObject, AgentPlayerData>(); // AgentPlayerObject - PlayerData 

當我嘗試了一段時間後得到PlayerDataList[player].CharName;,該詞典已經失去了它。

+9

「Dictionary」不會丟失數據。如果你把數據放到'Dictionary'中,那麼它就在那裏,直到你再次拿出來。如果數據不在那裏,那是因爲你把它拿出來了。你一定是做錯了,因爲我們無法猜測那可能是什麼。 – jmcilhinney 2014-10-05 10:32:39

+4

您是否檢查過AgentPlayerObject類的GetHashCode() - 實現?如果它基於可變數據,並且播放器實際上發生了變異,GetHashCode()可能會返回與最初在播放器添加到Dictionary時返回的哈希不同的哈希,這可以解釋爲什麼後續嘗試檢索數據會隨着時間的推移而失敗。 – 2014-10-05 10:44:23

+0

AgentPlayerObject.Equals方法的外觀如何? PlayerDataList.Count如何隨時間變化? – 2014-10-05 11:01:21

回答

1

看來AgentPlayerObject是一個類,它的等式成員沒有實現。

考慮實現平等成員:

另外,考慮實施IEquatable Interface,即IEquatable<AgentPlayerObject>If you implement IEquatable you still must override Object’s Equals and GetHashCode

IEquatable是對這種模式的重大改進,因爲它提供了強類型的equals方法。這可以保護調用者和被調用者傳遞不兼容的對象類型。此外,它避免了值類型的裝箱開銷。