簡體   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