C# 使用自定义方法的副本验证列表中所有属性的值

C# 使用自定义方法的副本验证列表中所有属性的值,c#,linq,C#,Linq,我需要编写一个方法,可以比较两个列表,以查看两者之间是否存在任何差异,而无需确切指定两个列表中要比较的属性。例如,我不能说: var exceptList=list1.Where(r=>r.Name!list2.Any(r2.Name==r.Name) 粗体部分需要是动态的,这样我可以对不同类型的列表重复使用该方法。我知道下面的例子行不通,但我需要类似的东西: var r = myLeftList.Where(p => !myRighttList.Any(p2 => p2

我需要编写一个方法,可以比较两个列表,以查看两者之间是否存在任何差异,而无需确切指定两个列表中要比较的属性。例如,我不能说:

var exceptList=list1.Where(r=>r.Name!list2.Any(r2.Name==r.Name

粗体部分需要是动态的,这样我可以对不同类型的列表重复使用该方法。我知道下面的例子行不通,但我需要类似的东西:

var r = myLeftList.Where(p => !myRighttList.Any(p2 =>
      p2.GetType().GetProperties().GetValue(myLeftList.IndexOf(p2)) ==
      p.GetType().GetProperties().GetValue(myRighttList.IndexOf(p))));

您可以使用
扩展方法

意识到这一点:

如果要比较某些自定义数据类型的对象序列, 您必须在中实现IEqualityComparer通用接口 你们班


为什么要使用反射来比较对象,而不是使用
Equals
方法?没有具体原因,这只是我目前正在尝试的方法。如果有更简单或更好的方法,我愿意接受建议。如果你的列表有自定义对象,那么你应该简单地覆盖该类型的
Equals
方法,如果列表中有不同顺序的相等项,那么列表是不同的还是相等的?@lazyberezovsky在我的例子中,它们是相同的。我不知道为什么,但except不会返回正确的值。下面是我的确切代码:List myLeftList=JsonConvert.DeserializeObject(LeftCompareMe.ToString());List myRighttList=JsonConvert.DeserializeObject(RightCompareMe.ToString());IEnumerable except=myLeftList.except(myriegtlist)@user2376648“不返回正确的值”是什么意思?您是否查看了IEqualityComparer部分?