[英]IEqualityComparer<T> not working for 'Contains' method
好的,所以我有以下类/接口
FilterFileViewModel
, CategoryViewModel
, IFilterViewModel
, ICategoryViewModel
。
继承设置如下:
IFilterViewMode : IEqualityComparer<IFilterViewModel>
ICategoryViewModel : IFilterViewModel
FilterViewModel : ViewModel, IFilterViewModel
CategoryViewModel :FilterViewModel, ICategoryViewModel
我在抽象类FilterViewModel
实现了IEqualityComparer
。
现在,我有一个IEnumerable<ICategoryViewModel>
,但是如果我在其上调用“Contains”,它似乎不会使用我在FilterViewModel
实现的Equals
方法。
我可以看到它最有可能是因为ICategoryViewModel
没有Equals
方法......所以我能想到的唯一解决方案是拥有IEnumerable<CategoryViewModel>
的集合,但这并不理想。
任何人都可以想到一个更好的结构方法吗?
您似乎误解了IEqualityComparer<IFilterViewModel>
接口的用途。 在模型对象中实现它并不常见。 相反,您可以在一个特殊的帮助器类中实现它,并在需要时使用它来调整相等的解释。 这通常在您无法控制类的Equals
方法的情况下完成。
如果您希望类本身知道如何比较相等性,则需要在类本身上重写Equals
和GetHashCode
方法。 如果要强制子类提供特定于类型的Equals
,请使用IEquatable<T>
接口:
IFilterViewMode : IEquatable<IFilterViewModel>
注意:即使您当前的代码路径不需要,也不要忘记实现GetHashCode
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.