如何从KeyValuePair列表中删除项?
最佳答案
如果同时拥有密钥和值,则可以执行以下操作
public static void Remove<TKey,TValue>(
this List<KeyValuePair<TKey,TValue>> list,
TKey key,
TValue value) {
return list.Remove(new KeyValuePair<TKey,TValue>(key,value));
}
这是因为
KeyValuePair<TKey,TValue>
不是重写相等,而是一个结构。这意味着它使用默认值相等。这只是比较要测试的字段的值是否相等。所以您只需要创建一个具有相同字段的新KeyValuePair<TKey,TValue>
实例。编辑
为了响应注释者,扩展方法在这里提供了什么值?
在代码中可以看到最好的理由。
list.Remove(new KeyValuePair<int,string>(key,value));
list.Remove(key,value);
同样,如果密钥或值类型是匿名类型,则需要扩展方法。
编辑2
下面是一个关于如何获取keyvaluepair的示例,其中2个中的一个具有匿名类型。
var map =
Enumerable.Range(1,10).
Select(x => new { Id = x, Value = x.ToString() }).
ToDictionary(x => x.Id);
变量映射是一个
Dicitonary<TKey,TValue>
,其中TValue
是一个匿名类型。枚举映射将产生一个keyvaluepair,其TValue
是相同的匿名类型。