1

我有这样的代码:

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

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

4

2 回答 2

2

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

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

如果您将此字典用作等效对象的缓存,则还可以使用以下GetOrAdd方法:

var value = likeDict.GetOrAdd(s, s);
bool added = object.ReferenceEquals(value, s);
于 2013-05-07T20:50:55.527 回答
0

如果这是静态/共享资源(如先前评论中所指出的),则可能会发生错误。在这种情况下,应用lock语句。

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

于 2013-05-07T20:45:18.653 回答