好的,所以我有以下类/接口
FilterFileViewModel
,CategoryViewModel
,IFilterViewModel
,ICategoryViewModel
。
继承设置如下:
IFilterViewMode : IEqualityComparer<IFilterViewModel>
ICategoryViewModel : IFilterViewModel
FilterViewModel : ViewModel, IFilterViewModel
CategoryViewModel :FilterViewModel, ICategoryViewModel
我在抽象类IEqualityComparer
中实现了FilterViewModel
。
现在,我有一个IEnumerable<ICategoryViewModel>
,但如果我打电话给#34;包含&#34;在它上面,它似乎没有使用我在Equals
实施的FilterViewModel
方法。
我可以看到它最有可能因为ICategoryViewModel
没有Equals
方法...所以我能想到的唯一解决方案是拥有一个IEnumerable<CategoryViewModel>
相反,但这并不理想。
有人能想出更好的结构方法吗?
答案 0 :(得分:3)
您似乎误解了IEqualityComparer<IFilterViewModel>
界面的目的。在模型对象中实现它并不常见。相反,您可以在一个特殊的帮助器类中实现它,并在需要时使用它来调整相等的解释。这通常在您无法控制类的Equals
方法的情况下完成。
如果您希望类本身知道如何比较相等性,则需要在类本身上覆盖Equals
和GetHashCode
方法。如果要强制子类提供特定于类型的Equals
,请使用IEquatable<T>
接口:
IFilterViewMode : IEquatable<IFilterViewModel>
注意:即使您当前的代码路径不需要,也不要忘记实施GetHashCode
。