为什么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)
方法在那里给你反馈操作是否做出任何改变。 使用最适合您的需求的那个。