2013-01-11 31 views
3

我需要为业务对象编写第二个相等比较器。这是一个专门的平等比较器,只适用于某些情况。我不想重写Equal(),因为我们的持久层使用它来内部比较对象以供自己使用。 让我给你一个类的实例:使用两个不同的相等比较器的C#

public class Product : BusinessObjectBase 
{ 
    string Name {get;set;} 
    string Desc {get;set;} 
    double Price {get;set;} 
} 

因为我们纪念三个属性在我们的数据访问层的持久性数据属性时,equals()方法在BusinessObjectBase比较这些属性。现在,在特定情况下,我想检查产品A是否等于产品B只是名称。我不想在检查上硬编码实际属性,因为此属性可能稍后会更改。

尽管可以在这里使用IComparer,但是基于MSDN上的描述,IComparer应该用来不等同项目而是对它们进行排序,所以这看起来不是100%正确的答案。 我想使用.NET已有的东西,而不是创建另一个接口。 这样做的最好方法是什么?

谢谢

+1

它已经存在:猜名字? [IEqualityComparer!](http://msdn.microsoft.com/en-us/library/ms132151.aspx);) – digEmAll

+0

你在说“产品A等于产品B只是名称,我不想硬编码检查时的实际属性,因为此属性可能会发生变化“。如何比较2个对象而不指定Name属性并仅使用IEqualityComparer 。你是否在Equals Method中使用了反射,或者在IEqualityComparer 中有什么特别之处,这会让你这么做 – Sankara

回答

14

您正在寻找IEqualityComparer<T>

+0

非常感谢。正是我在寻找的东西 – BlueChameleon

+0

@Slaks:我明白你的答案,我只是好奇,也读过我的评论,我的问题是这个界面中如此特别的东西能够解决他的问题吗?他不能用IComparer/ – Sankara

+0

@ 1010101:'IEqualityComparer '包含'GetHashCode(T)',使其可用于散列表。对于没有订购的类型也可以实现。 – SLaks

相关问题