我想比较两个嵌套对象列表。如果父对象var description = '1 2 3 4 5 6 7 8 9 10 11 12 13 14'
function limitLength(str, length, exclude) {
var i = 0
for (var count = 0 ; i < str.length && count < length; i++) {
if (!str[i].match(exclude)) {
count++
}
}
return str.substr(0, i)
}
description = limitLength(description, 15, /([\s])/)
console.log(description)
不同和/或子对象Id
或Id
的属性不同,则我认为它们已更改。
我已经在下面实现了自己的Baz
和Equals
版本,但是尽管使用了自己的相等比较器,但GetHashCode
仍会产生结果,而我希望对象是相等的。
Except()
var foo1 = new Foo
{
Id = 1,
Bars = new List<Bar>
{
new Bar
{
Id = 1,
Baz = 1.5
},
new Bar
{
Id = 1,
Baz = 1.5
}
}
};
var foo2 = new Foo
{
Id = 1,
Bars = new List<Bar>
{
new Bar
{
Id = 1,
Baz = 1.5
},
new Bar
{
Id = 1,
Baz = 1.5
}
}
};
var diff = new[] { foo1 }.Except(new[] { foo2 });
答案 0 :(得分:4)
您的代码中有三点错误:
Except
方法,因此没有被使用。GetHashCode
中的Foo
实现是错误的,它为相同的对象返回不同的结果,因此永远不会调用Equals
方法。Equals(x.Bars, y.Bars)
,这将检查引用是否相等。您可以使用SequenceEqual
来逐一比较元素:x.Bars.SequenceEqual(y.Bars)