1
我想使用ConcurrentDictionary
來檢查此數據密鑰是否已經添加過,但看起來我仍然可以添加之前添加的密鑰。ConcurrentDictionary不止一次添加相同的密鑰
代碼:
public class pKeys
{
public pKeys()
{ }
public pKeys(long sID, long pID)
{
this.seID = sID;
this.pgID = pID;
}
public long seID;
public long pgID;
}
public static ConcurrentDictionary<pKeys, bool> existenceDic
= new ConcurrentDictionary<pKeys, bool>();
測試代碼:
pKeys temKey = new pKeys(111, 222);
bool res = existenceDic.TryAdd(temKey, true);
Console.WriteLine(res);
temKey = new pKeys(111, 222);
res = existenceDic.TryAdd(temKey, true);
Console.WriteLine(res);
結果:
true
true
您的'pKeys'對象不會覆蓋'GetHashCode()'或'Equals()',所以這兩個不同的實例被認爲是不同的值。要麼使用同一個實例兩次(而不是第二次調用'new'),要麼正確地覆蓋這些方法,以便包含相同值的不同實例被認爲是相同的值。 –
也許很容易修復,我只是將兩個元素鍵轉換成一個字符串,然後像散列一樣工作.... –
不,不要這樣做。如果這樣做,那麼(11,1222)的值將具有與(111,222)的值相同的哈希碼,因爲沒有很好的理由。衝突不是致命的,但是您應該設計哈希碼實現,至少儘量避免它們。 –