【问题标题】:How to remove from ConcurrentDictionary if i dont want to get the value如果我不想获取值,如何从 ConcurrentDictionary 中删除
【发布时间】:2014-04-30 09:02:37
【问题描述】:

似乎 ConcurrentDictionary 只有 TryRemove 方法,而没有 Remove 方法。这是为什么呢?

当我想按键删除条目时,我不关心值。我该怎么做?

【问题讨论】:

  • 去掉值然后扔掉,就这么简单。
  • @Luaan:但我不明白为什么需要提供一个值。
  • @clamp,你的意思是你想知道为什么TryRemove() 将删除的值传回而Remove() 没有?
  • 您没有提供值,它是一个输出参数。它没有什么区别,除了当你不关心价值时会有轻微的笨拙。从字典中删除值已经是很多工作,它是否返回值实际上并不重要。
  • @clamp,然后我会第二次 sehe 的评论 there

标签: c# .net


【解决方案1】:

TryRemoveConcurrentDictionary 的本机方法,而与其他集合一样,您确实可以使用Remove 方法显式实现ICollection

ConcurrentDictionary<TKey, TValue>.ICollection<KeyValuePair<TKey, TValue>>.Remove

http://msdn.microsoft.com/en-us/library/dd287153%28v=vs.110%29.aspx

所以TryRemoveRemove 的安全替代品,但您可以在两者之间进行选择。

【讨论】:

    【解决方案2】:

    据我所知,ConcurrentDictionary 是用于多线程场景的。

    “Remove”的缺失和“TryRemove”的存在是因为两个不同的线程可能会尝试同时从集合中删除一个特定的项目,但出于显而易见的原因,只有一个可以做到。

    TryRemove 尝试删除该项目,但如果没有找到该项目,则不会发生异常。

    【讨论】:

    • 不乏Remove,它作为ICollection的实现存在,作为集合的常见实现。 TryRemoveRemove 的安全包装器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    相关资源
    最近更新 更多