IEqualityComparer<T> 不适用于 'Contains' 方法

IEqualityComparer<T> not working for 'Contains' method

好的,所以我有以下 classes/interfaces

FilterFileViewModel, CategoryViewModel, IFilterViewModel, ICategoryViewModel.

继承设置如下:

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

而且我已经在摘要中实现了IEqualityComparer class FilterViewModel.

现在,我有一个 IEnumerable<ICategoryViewModel>,但是如果我在上面调用 "Contains",它似乎没有使用我在 [=18= 实现的 Equals 方法].

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

谁能想出更好的方法来构建它?

您似乎误解了 IEqualityComparer<IFilterViewModel> 界面的用途。在模型对象中实现它并不常见。相反,您可以在一个特殊的助手 class 中实现它,并在需要时使用它来调整对等式的解释。这通常是在您无法控制 class.

Equals 方法的情况下完成的

如果您想让 classes 自己知道如何比较是否相等,您需要覆盖 classes 自己的 EqualsGetHashCode 方法。如果你想强制 subclasses 提供特定类型的 Equals,请使用 IEquatable<T> 接口:

IFilterViewMode : IEquatable<IFilterViewModel>

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