如何比较两个复杂的对象?

时间:2015-10-06 11:44:32

标签: c#

我想自己写一个List。 所以我有一个班级List和一个班级ListItem。 我现在想要做的是创建不同的类,例如类car。我想从ListItem类中推断出类car,以便创建List个汽车。 现在,类List将有不同的方法,就像C#给你的那样。 我写了一个Add和Count方法,两者都有效。 这是棘手的部分...我想写一个Funktion来查找列表中的项目。问题是我不能只比较它们因为1.我不知道Objekt会是什么样子以及它会有什么成员。 2.我不想比较ListItem类的特性,因为它们与真实对象无关,它们只与List相关。

我的想法是,为每个对象创建一个列表类,因此在我的示例中,它将是从列表类推导出的carList。这样我就可以编写一个能够比较要比较的Methode,因为它会知道ListItem对象。现在我不想为每个想要列表的对象创建一个列表类。必须以不同的方式使用sice c#还会为您提供相同的列表类。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:-1)

您应该覆盖Equals上的object(继承自Car) -

class car
{
    public override bool Equals(object other) {
        var o = other as car;
        if ( o == null ) return false;

        if this.myProperty = o.myProperty return true;

        return false;
    }
}

然后该列表将使用此实现来检测两辆车是否相等。在Find - 方法中,您现在可以简单地调用列表中的每个项目(如果它等于搜索到的项目):

if (currentItemInList.Equals(searchItem)) // ...

编辑:在为任何类实现Equals时,如果您的类的对象存储在像GetHashCode这样的散列容器中,您应该始终实现Dictionary<TKey,TValue>。如果您想进一步阅读,请参阅MSDN for GetHashCode and Equals