假设我有以下对象foo及其属性,如下所示:
class foo
public string name
public string property1
public string property2
Run Code Online (Sandbox Code Playgroud)
现在让我们实例化两个列表foo:List<foo>()
第一个列表包含两个foo对象:
new foo() =
{
name = "name",
property1 = "random value",
property1 = "random value"
}
new foo() =
{
name = "name",
property1 = "random value",
property1 = "random value"
}
Run Code Online (Sandbox Code Playgroud)
第二个列表包含一个foo对象:
new foo() =
{
name = "name",
property1 = "random value",
property1 = "random value"
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用LINQ来比较并返回一个List<foo>包含这两个列表(或任何其他列表)之间差异的新列表?考虑到项目顺序和任何不匹配的属性值也被视为差异。
这对于原始对象很有帮助: 使用 linq 逐项比较两个列表,但没有提供返回具有差异的新列表的方法。
@CSharpie 重新打开...而且现在问题看起来定义很不明确 - 即 {1,2,3,4} 和 {1,3,4} 的预期结果是什么?可能OP正在寻找某种差异..
@AlexeiLevenkov 输出应该是 2。或者对于 {1,2,3,4} 和 {1,3,2, 4} 的列表,输出应该是 {3,2},因为 3 的顺序(或值)和2个与原来的列表相比发生了变化。
尝试使用except LINQ 方法:
List<int> a = new List<int>{ 1, 2, 5 };
List<int> b = new List<int>{ 2, 3};
var result = a.Except(b).Union(b.Except(a)).ToList();
Run Code Online (Sandbox Code Playgroud)
在集合论中,(A-B)+(B-A)相当于它们两者之间的差异。