我只想删除一个值..之后我不需要使用变量.为什么不包含不需要第二个参数的重载?
我真的必须将它存储在一个临时的局部变量中,而不是使用它,并在方法结束时让垃圾收集器收集它吗?看起来很傻..
rob*_*das 34
C#7添加了丢弃语法糖
所以现在你可以写:
dictionary.TryRemove(entry.Key, out _);
Run Code Online (Sandbox Code Playgroud)
我们允许"丢弃"作为输出参数,以_的形式,让你忽略你不关心的参数:
p.GetCoordinates(out var x, out _); // I only care about x
Jor*_*dão 26
您可以创建所需的方法:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
更新:或者,正如评论中提到的Dialecticus,只需使用Remove.但请注意,由于它是一个显式的接口实现,因此您需要对an的引用IDictionary<TKey, TValue>,如果您想避免转换ConcurrentDictionary<TKey, TValue>引用,则会引导您返回创建扩展方法:
public static class ConcurrentDictionaryEx {
public static bool Remove<TKey, TValue>(
this ConcurrentDictionary<TKey, TValue> self, TKey key) {
return ((IDictionary<TKey, TValue>)self).Remove(key);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您对删除的值不感兴趣,只需致电IDictionary.Remove(key).它被遮蔽了,所以你必须明确地调用它.
例:
var dict = new ConcurrentDictionary<string, string>();
dict.AddOrUpdate("mykey", (val) => "test", (val1, val2) => "test");
((IDictionary)dict).Remove("mykey");
Run Code Online (Sandbox Code Playgroud)
该TryRemove(key, out value)方法可以为您提供有关操作是否进行任何更改的反馈.使用最适合您需求的那个.
| 归档时间: |
|
| 查看次数: |
19769 次 |
| 最近记录: |