c#如何比较两个列表,并从第一个列表中得到差异?

发布时间: 2017/2/26 20:27:43
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我困在我在那里有两个列表的情况里。正确的方法来比较这两个和第三个列表中得到的结果将是什么。但在这里是一个小问题。请参阅下面的示例︰

ListOld = {
    [Name=Amit, Class=V, Roll=3],
    [Name=Naveen, Class=V, Roll=3],
    [Name=Sammy, Class=V, Roll=3],
    [Name=Neil, Class=X, Roll=21],
    [Name=John, Class=VI, Roll=63]};

ListNew = {
    [Name=Amit, Class=VI, Roll=13],
    [Name=Naveen, Class=VII, Roll=3],
    [Name=Sammy, Class=V, Roll=3],
    [Name=Sanjay, Class=VIII, Roll=2]};

ResultantList = {
    [Name=Amit, Class=VI, Roll=13],
    [Name=Naveen, Class=VII, Roll=3],
    [Name=Sanjay, Class=VIII, Roll=2]};

在上面的示例中,项目取得了 3 的更改,更新阿米特和纳温,桑杰作为一名新成员。

所以在我查询我需要比较两个列表,并想要第一个列表中选择更新或添加的项目。

我试过,Except()、 Intersect()、 union(),与平等接口,但没有成功。请帮助。

解决方法 1:

你可以通过编写IEqualityComparer

public class SomeClassComparer : IEqualityComparer<SomeClass>
{
    public bool Equals(SomeClass x, SomeClass y)
    {
        return x.Name == y.Name && x.Class == y.Class && x.Roll == y.Roll;
    }

    public int GetHashCode(SomeClass obj)
    {
        return (obj.Name + obj.Class).GetHashCode();
    }
}

现在,linq 是简单

var result = ListNew.Except(ListOld , new SomeClassComparer()).ToList();

你也可以做同样的事情由沙家 ToStringGetHashcode 方法,但是 IEqualityComparer 是好尤其是当你有不能控制你使用的类。

赞助商