为什么ConcurrentDictionary.TryRemove需要第二个输出参数?

我只想删除一个值..我不需要以后使用该variables。 为什么不包含第二个参数不需要的地方?

我真的不得不把它存储在一个临时的局部variables,不使用它,并有方法结束时垃圾收集器收集它? 似乎相当愚蠢..

该函数: http : //msdn.microsoft.com/en-us/library/dd287129.aspx

你可以创build你想要的方法:

 public static class ConcurrentDictionaryEx { public static bool TryRemove<TKey, TValue>( this ConcurrentDictionary<TKey, TValue> self, TKey key) { TValue ignored; return self.TryRemove(key, out ignored); } } 

更新 :或者,如评论中提到的Dialecticus ,只需使用Remove 。 但请注意,由于它是一个明确的接口实现,所以需要对IDictionary<TKey, TValue>进行引用,如果要避免投射ConcurrentDictionary<TKey, TValue>引用,则会引导您创build扩展方法:

 public static class ConcurrentDictionaryEx { public static bool Remove<TKey, TValue>( this ConcurrentDictionary<TKey, TValue> self, TKey key) { return ((IDictionary<TKey, TValue>)self).Remove(key); } } 

如果您对已删除的值不感兴趣,只需调用IDictionary.Remove(key) 。 它是阴影的,所以你必须明确地调用它。

例:

 var dict = new ConcurrentDictionary<string, string>(); dict.AddOrUpdate("mykey", (val) => "test", (val1, val2) => "test"); ((IDictionary)dict).Remove("mykey"); 

TryRemove(key, out value)方法在那里给你反馈操作是否做出任何改变。 使用最适合您的需求的那个。