【发布时间】:2015-05-26 07:29:21
【问题描述】:
我试图找出两个列表之间的差异并将它们输出到弹出窗口。但不知何故,我没有使用除方法得到它们之间的正确区别。请帮助指导实现这一点的最佳方法
这是课程详情
public class UserDetails
{
public List<string> ManagementCenter;
public List<string> Group;
public List<string> Roles;
}
List<UserDetails> userDetailsListFirst = new List<UserDetails>();
List<UserDetails> userDetailsListSecond = new List<UserDetails>();
//This is not working
var valuesDifference = userDetailsListSecond.Except(userDetailsListFirst);
Expected Data
-------------
List A-
Management Center: JP
Application Group(s): Corporate
User Role(s): SuperRole;
List B-
Management Center: JP
Application Group(s): Corporate; Trading;Supplementary;
User Role(s): SuperRole;
Here Comparing List A with List B . and output should show missing one
Management Center: JP
Application Group(s): Trading;Supplementary;
User Role(s): SuperRole;
【问题讨论】:
-
尝试在你的 UserDetails 类中覆盖 equals...
-
如果你的类没有正确覆盖
Equals+GetHashCode,默认情况下只会比较引用,而不是属性。这就是Enumerable.Except无法按预期工作的原因。因此,要么覆盖它们,要么为Except(或其他 LINQ 方法)提供自定义的IEqualityComparer<UserDetails>。 Here's a possible implementation 代表GetHashCode,如果您想比较列表属性。 -
您需要的是一些自定义差异。测试相等性的方法只测试 - 两个对象是否相等。虽然您可以提供一些自定义代码来确定相等性本身,但没有什么可以提供这种级别的差异匹配。
-
已经尝试实现相同的,但没有运气:(
标签: c# .net list generics collections