C# 求两个对象列表的对称差

C# 求两个对象列表的对称差,c#,.net,list,data-structures,symmetric-difference,C#,.net,List,Data Structures,Symmetric Difference,考虑类型对象的两个列表(或其他适当的数据结构): class Object { public string clause; public string preamble; public string description; } 我需要建立一个不完全匹配的对象列表(序言和描述两者完全相同)。例如,如果列表a中有一条记录的序言与列表B中的一条记录匹配,但其说明不匹配,则应将其包括在内。如果它们的描述匹配,则不应包括它们(这将是它们交叉点的一部分) 我一直在绕圈寻找解决方

考虑类型对象的两个列表(或其他适当的数据结构):

class Object
{
    public string clause;

    public string preamble;
    public string description;
}
我需要建立一个不完全匹配的对象列表(
序言
描述
两者完全相同)。例如,如果列表a中有一条记录的
序言
与列表B中的一条记录匹配,但其
说明
不匹配,则应将其包括在内。如果它们的
描述
匹配,则不应包括它们(这将是它们交叉点的一部分)


我一直在绕圈寻找解决方案,包括实现嵌套的
foreach
循环。对于
列表
或任何其他适当的数据结构,是否有一个对称的差分函数,可以通过这样比较对象的成员来比较对象


在上下文中,其中一个列表表示使用Epplus库获取的Excel电子表格中的记录,另一个列表表示Jira API中的问题。

没有方便的内置解决方案,这可能是因为.NET中的对象不是数据。但是,有些项目对您的问题很有用,例如,它可以使用反射来比较对象,并且可以配置为列出两个对象之间的所有差异。

HashSet.SymmetricExceptWith不是一个方便的内置解决方案吗?您需要创建一个
IEqualityComparer
,但仅此而已。“这样可以通过比较对象的成员来比较对象吗?”因此我将问题解释为他无法检测两个对象之间的差异。这是一句话的一半-其余所有内容(包括标题)都与对称差异有关,你在回答中根本没有提到。我认为用
IEqualityComparer
写一个解释如何做到这一点的答案会更合适,可能会将该项目作为一种避免编写该项目的方式。(但实际上,对于两个属性,比较器的编写非常简单)。您需要为您的类型创建一个适当的<代码> IEqualityComparer <代码>(我希望您没有调用<代码>对象< /代码>)来考虑具有相同前导和描述的对象是相等的。在那之后,
HashSet.SymmetricExceptWith
是你的朋友-如果你不想使用它,你可以使用
a.Except(b,comparer).Concat(b.Except(a,comparer))