IEqualityComparer <t>不适用于&#39;包含&#39;方法

时间:2015-09-16 09:49:54

标签: c# iequalitycomparer

好的,所以我有以下类/接口

FilterFileViewModelCategoryViewModelIFilterViewModelICategoryViewModel

继承设置如下:

IFilterViewMode : IEqualityComparer<IFilterViewModel>
ICategoryViewModel : IFilterViewModel
FilterViewModel : ViewModel, IFilterViewModel
CategoryViewModel :FilterViewModel, ICategoryViewModel

我在抽象类IEqualityComparer中实现了FilterViewModel

现在,我有一个IEnumerable<ICategoryViewModel>,但如果我打电话给#34;包含&#34;在它上面,它似乎没有使用我在Equals实施的FilterViewModel方法。

我可以看到它最有可能因为ICategoryViewModel没有Equals方法...所以我能想到的唯一解决方案是拥有一个IEnumerable<CategoryViewModel>相反,但这并不理想。

有人能想出更好的结构方法吗?

1 个答案:

答案 0 :(得分:3)

您似乎误解了IEqualityComparer<IFilterViewModel>界面的目的。在模型对象中实现它并不常见。相反,您可以在一个特殊的帮助器类中实现它,并在需要时使用它来调整相等的解释。这通常在您无法控制类的Equals方法的情况下完成。

如果您希望类本身知道如何比较相等性,则需要在类本身上覆盖EqualsGetHashCode方法。如果要强制子类提供特定于类型的Equals,请使用IEquatable<T>接口:

IFilterViewMode : IEquatable<IFilterViewModel>

注意:即使您当前的代码路径不需要,也不要忘记实施GetHashCode