如何比较两个复杂对象?
我想自己写一个List
。 所以我有一个类List
和类ListItem
。 我现在想要做的是创建不同类,例如类car
。我想从类ListItem中推导出类car
,以便我可以创建一个List
汽车。 现在类List
应该有不同的方法,就像一个C#给你的。 我写了一个Add和一个Count方法,并且都可以工作。 这里是棘手的部分...我想写一个函数来查找列表中的项目。问题是我不能仅仅比较它们,因为1.我不知道对象将是什么样子以及它会有什么成员。 2.我不想比较类ListItem的特征,因为它们与真实对象无关,它们只与List有关。如何比较两个复杂对象?
我的想法是,为每个对象创建一个列表类,所以在我的例子中,它将是一个从列表类推导出来的carList
。这样我就可以编写一个Methode来知道要比较的内容,因为它可以知道ListItem对象。现在我不想为每个想要列表的对象创建一个列表类。必须有不同的方式sice c#也给你相同的列表类。 任何人都可以帮忙吗?
你应该在你的Car
-class覆盖Equals
(从object
继承):然后
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;
}
}
名单将使用此implenentation因为如果两辆车都是平等的检测。在您Find
- 方法现在您只需在列表中要求每一个项目,如果它等于一个搜索:
if (currentItemInList.Equals(searchItem)) // ...
编辑:当任何类实现Equals
你应该总是在同样的情况下实现GetHashCode
的的对象你类存储在散列容器中,如Dictionary<TKey,TValue>
。如果您想进一步阅读,请参阅MSDN for GetHashCode and Equals
如果你自己编写整个列表实现,你可以用任何你喜欢的方式来命名比较方法,因为你是谁来调用它们。如果可能发生的事情是,你的对象最终在通用容器中,但你应该实现'IEquatable
@PeterSchneider当然你是对的,但我试图保持简单。我也添加了HashCode。 – HimBromBeere
嗯......我认为'GetHashCode()'只对字典和可能的其他散列容器很重要,但对于一般的相等性测试来说不重要。 –
您的问题是“任何人都可以帮忙吗?” - 答案显然是“是的,有人可以帮忙”。但是,请分享一下你所拥有的东西,帮助你更轻松地帮助你。 – Dietz
@fubo我不知道你的意思......当然,我把这个对象作为一个超载来搜索我的函数! –
你可以给我们提供'Find'方法的方法签名吗?会不会有'Contains'方法。 – Gusdor