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 自己的 Equals
和 GetHashCode
方法。如果你想强制 subclasses 提供特定类型的 Equals
,请使用 IEquatable<T>
接口:
IFilterViewMode : IEquatable<IFilterViewModel>
注意:即使您当前的代码路径不需要它,也不要忘记实现 GetHashCode
。
好的,所以我有以下 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 自己的 Equals
和 GetHashCode
方法。如果你想强制 subclasses 提供特定类型的 Equals
,请使用 IEquatable<T>
接口:
IFilterViewMode : IEquatable<IFilterViewModel>
注意:即使您当前的代码路径不需要它,也不要忘记实现 GetHashCode
。