C# 使用c将列表映射到字典时如何筛选值#

C# 使用c将列表映射到字典时如何筛选值#,c#,list,dictionary,todictionary,C#,List,Dictionary,Todictionary,我正试图将两个列表映射到字典,但我得到错误“一个具有相同键的对象已存在于…” List columnValue=new List(); List xpathValue=new List(); var dic=columnValue.Zip(xpathValue,(k,v)=>new{k,v}).Distinct().ToDictionary(x=>x.k,x=>x.v); 不同< /COD>查看整个对象,因此所有属性必须相同,以将对象视为相等。如果Zip之后的列表中有两个元素具有相同的k但不

我正试图将两个列表映射到字典,但我得到错误“一个具有相同键的对象已存在于…”

List columnValue=new List();
List xpathValue=new List();
var dic=columnValue.Zip(xpathValue,(k,v)=>new{k,v}).Distinct().ToDictionary(x=>x.k,x=>x.v);

<是否有人知道如何解决这个问题?谢谢。

< P> <代码>不同< /COD>查看整个对象,因此所有属性必须相同,以将对象视为相等。如果
Zip
之后的列表中有两个元素具有相同的
k
但不同的
v
,则
ToDictionary
将出现错误

试试这个:

var dic = columnValue.Zip(xpathValue, (k, v) => new { k, v})
                     .GroupBy(x => x.k)
                     .ToDictionary(g => g.Key, g => g.First().v);
它通过
k
对元素进行分组,并将每个组中的第一个元素添加到字典
v
。这就解决了
独特的
方法使用问题

var dic = columnValue.Zip(xpathValue, (k, v) => new { k, v})
                     .GroupBy(x => x.k)
                     .ToDictionary(g => g.Key, g => g.First().v);