如何从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是相同的匿名类型。

08-04 17:26