我有这样的代码:
if (!likeDict.ContainsKey(s))
{
likeDict.Add(s, s);
}
而且我不断收到一个错误,即已经添加了具有相同密钥的项目。我认为 ContainsKey 是对此的检查,这就是发生错误的地方,而不是在添加行。我是否误解了 ContainsKey?
我有这样的代码:
if (!likeDict.ContainsKey(s))
{
likeDict.Add(s, s);
}
而且我不断收到一个错误,即已经添加了具有相同密钥的项目。我认为 ContainsKey 是对此的检查,这就是发生错误的地方,而不是在添加行。我是否误解了 ContainsKey?
听起来您在多线程场景中使用字典。如果是这种情况,您可以切换到使用ConcurrentDictionary<TKey, TValue>
which 提供以下TryAdd
方法:
bool added = likeDict.TryAdd(s, s);
如果您将此字典用作等效对象的缓存,则还可以使用以下GetOrAdd
方法:
var value = likeDict.GetOrAdd(s, s);
bool added = object.ReferenceEquals(value, s);
如果这是静态/共享资源(如先前评论中所指出的),则可能会发生错误。在这种情况下,应用lock语句。
希望这会有所帮助。我最好的,AB