在Dictionary ContainsKey检查中找不到ArgumentException

时间:2013-05-07 20:02:51

标签: c# asp.net .net collections dictionary

我有这样的代码:

if (!likeDict.ContainsKey(s))
{
    likeDict.Add(s, s);
}

我一直收到错误,即已经添加了具有相同密钥的项目。我认为ContainsKey是对此的检查,这是发生错误的地方,而不是在添加行。我是否误解了ContainsKey?

2 个答案:

答案 0 :(得分:2)

听起来您在多线程场景中使用字典。如果是这种情况,您可以切换为使用提供以下ConcurrentDictionary<TKey, TValue>方法的TryAdd

bool added = likeDict.TryAdd(s, s);

如果您使用此词典作为等效对象的缓存,您还可以使用GetOrAdd方法:

var value = likeDict.GetOrAdd(s, s);
bool added = object.ReferenceEquals(value, s);

答案 1 :(得分:0)

如果这是静态/共享资源(如前面的注释中所指出的),则可能发生错误。在这种情况下,请应用lock声明。

希望这会有所帮助。我最好的,AB

相关问题