3

我已经环顾了一段时间,看到很多关于修改GetHashCode()和玩的参考资料ContainsKey()TryGetValue()- 但所有这些问题和示例都与一些模糊的用户特定键有关。

我有一个基本的Dictionary<long, object>. 当尝试使用ContainsKey()orTryGetValue()时,它并不总是会受到打击(当它应该受到打击时)并继续尝试填充丢失的条目(如果是这种情况,它在技术上应该如此)。

你猜对了:它会抱怨现有的密钥,因为它确实存在。

那么为什么它在匹配基本long密钥时遇到问题,你如何让它表现?

编辑:代码。我已经尝试了几件事。以最基本的形式:

public void Add(long id)
    {
        if (AreaDataDict.ContainsKey(id)) return;

        AreaData ad = new AreaData(id);
        ad.Load();
        AreaDataDict.Add(id, ad);
    }

还:

public void Add(long id)
{
    AreaData areaData;
    if (AreaDataDict.TryGetValue(id, out areaData)) return;

    AreaData ad = new AreaData(id);
    ad.Load();
    AreaDataDict.Add(id, ad);
}

编辑2:没有发生关键变化。除了在未找到值时添加之外,仅从中读取数据。

4

1 回答 1

1

使用 aConcurrentDictionary是答案,幸好受到 user454076 的启发。

于 2013-06-05T15:32:16.707 回答