C# 比较两个相同类型的列表并删除重复项

C# 比较两个相同类型的列表并删除重复项,c#,list,C#,List,我正在尝试计算名为“AdditionalInformation”类型的2个列表。此类型具有代码属性 IList<AdditionalInformation> lis1 IList<AdditionalInformation> lis2 我需要删除除一个之外的所有“重复项”,因此我的结果应该如下所示: ICrmCdsAdditionalInformation importerAi1 = new CrmCdsAdditionalInformation {

我正在尝试计算名为“AdditionalInformation”类型的2个列表。此类型具有代码属性

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",
      };