我有这样的代码:
if (!likeDict.ContainsKey(s))
{
likeDict.Add(s, s);
}
我一直收到错误,即已经添加了具有相同密钥的项目。我认为ContainsKey是对此的检查,这是发生错误的地方,而不是在添加行。我是否误解了ContainsKey?
答案 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