C# 比较两个相同类型的列表并删除重复项
我正在尝试计算名为“AdditionalInformation”类型的2个列表。此类型具有代码属性C# 比较两个相同类型的列表并删除重复项,c#,list,C#,List,我正在尝试计算名为“AdditionalInformation”类型的2个列表。此类型具有代码属性 IList<AdditionalInformation> lis1 IList<AdditionalInformation> lis2 我需要删除除一个之外的所有“重复项”,因此我的结果应该如下所示: ICrmCdsAdditionalInformation importerAi1 = new CrmCdsAdditionalInformation {
IList<AdditionalInformation> lis1
IList<AdditionalInformation> lis2
我需要删除除一个之外的所有“重复项”,因此我的结果应该如下所示:
ICrmCdsAdditionalInformation importerAi1 = new CrmCdsAdditionalInformation
{
Code = "Duplicate",
};
ICrmCdsAdditionalInformation importerAi3 = new CrmCdsAdditionalInformation
{
Code = "Unique1",
};
请参见中的
Enumerable.Union
。
创建一个IEqualityComparer
类:
class AdditionalInfoComparer:IEqualityComparer{
公共布尔等于(ICRMDCDAdditionalin信息x,ICRMDCDAdditionalin信息y){
if(Object.ReferenceEquals(x,y))
返回true;
if(Object.ReferenceEquals(x,null)| | Object.ReferenceEquals(y,null))
返回false;
返回x.代码==y.代码;
}
//对于一对对象,If Equals()返回true
//然后GetHashCode()必须为这些对象返回相同的值。
公共int GetHashCode(ICRMCD信息信息){
if(Object.ReferenceEquals(info,null))返回0;
返回信息代码;
}
}
那就
var mergedList=list1.Union(list2,new AdditionalInfoComparer());
保留哪一个重要吗?这是否回答了您的问题?弗雷迪的回答应该有帮助you@Magnetron有正确的链接,来回答这个问题。使用linq groupby或自定义IEqualityComparer都可以解决这个问题。如果必须从多个点执行此操作,则使用比较器可以防止复制逻辑。
ICrmCdsAdditionalInformation importerAi1 = new CrmCdsAdditionalInformation
{
Code = "Duplicate",
};
ICrmCdsAdditionalInformation importerAi2 = new CrmCdsAdditionalInformation
{
Code = "Duplicate",
};
ICrmCdsAdditionalInformation importerAi3 = new CrmCdsAdditionalInformation
{
Code = "Unique1",
};
ICrmCdsAdditionalInformation importerAi2 = new CrmCdsAdditionalInformation
{
Code = "Duplicate",
};
ICrmCdsAdditionalInformation importerAi1 = new CrmCdsAdditionalInformation
{
Code = "Duplicate",
};
ICrmCdsAdditionalInformation importerAi3 = new CrmCdsAdditionalInformation
{
Code = "Unique1",
};