【问题标题】:ArgumentException not found in Dictionary ContainsKey check在 Dictionary ContainsKey 检查中找不到 ArgumentException
【发布时间】:2013-05-01 21:49:09
【问题描述】:

我有这样的代码:

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

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

【问题讨论】:

  • 也许吧,不过我不知道....我想我可以尝试捕获异常
  • 如果key已经存在,覆盖值是否可以?然后只需使用likeDict[s]=s
  • 它是 Anthony 推测的 static(或缓存)吗?给我们更多背景信息。
  • 原来你们都没事。您需要更多上下文作为参数。为 SQL 注入添加导致上述行中的问题。谢谢。
  • @zimdanen:更合适的是HashSet<T>

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-12
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多