gpt4 book ai didi

c# - IEqualityComparer 不适用于 'Contains' 方法

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:06 24 4
gpt4 key购买 nike

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

FilterFileViewModel , CategoryViewModel , IFilterViewModel , ICategoryViewModel .

继承设置如下:

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

我已经实现了IEqualityComparer在抽象类中 FilterViewModel .

现在,我有一个 IEnumerable<ICategoryViewModel> ,但是如果我在上面调用“包含”,它似乎没有使用 Equals我在 FilterViewModel 实现的方法.

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

有人能想出更好的方法来构建它吗?

最佳答案

你似乎误解了IEqualityComparer<IFilterViewModel>的目的界面。在模型对象中实现它并不常见。相反,您在一个特殊的帮助器类中实现它,并在需要时使用它来调整对等式的解释。这通常在您无法控制 Equals 的情况下完成。类的方法。

如果你想让类自己知道如何比较相等性,你需要覆盖 EqualsGetHashCode类本身的方法。如果你想强制子类提供特定类型的 Equals , 使用 IEquatable<T>接口(interface):

IFilterViewMode : IEquatable<IFilterViewModel>

注意:不要忘记执行 GetHashCode即使您当前的代码路径不需要它。

关于c# - IEqualityComparer<T> 不适用于 'Contains' 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32605178/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com