C#Dictionary ContainsKey / TryGetValue不起作用

时间:2013-04-09 15:06:49

标签: c# dictionary long-integer containskey trygetvalue

我已经浏览了一段时间,并且在使用GetHashCode()ContainsKey()时看到了大量有关修改TryGetValue()和其他内容的参考资料 - 但所有这些问题和示例都与一些模糊的用户专用密钥。

我有一个基本的Dictionary<long, object>。在尝试ContainsKey()TryGetValue()时,它并不总是受到影响(应该在什么时候)并继续尝试填充缺失的条目(如果是这样的话,技术上应该如此)。

你猜对了:它然后抱怨现有的密钥,因为它存在。

那么为什么匹配基本的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:没有发生任何密钥更改。除了添加未找到值之外,只能从中读取数据。

1 个答案:

答案 0 :(得分:1)

使用ConcurrentDictionary就是答案,幸好受到用户454076的启发。