繁体   English   中英

的IEqualityComparer <T> 不适用于&#39;Contains&#39;方法

[英]IEqualityComparer<T> not working for 'Contains' method

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

FilterFileViewModelCategoryViewModelIFilterViewModelICategoryViewModel

继承设置如下:

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方法的情况下完成。

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

IFilterViewMode : IEquatable<IFilterViewModel>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM