[英]IEqualityComparer<T> not working for 'Contains' method
好的,所以我有以下類/接口
FilterFileViewModel
, CategoryViewModel
, IFilterViewModel
, ICategoryViewModel
。
繼承設置如下:
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
方法的情況下完成。
如果您希望類本身知道如何比較相等性,則需要在類本身上重寫Equals
和GetHashCode
方法。 如果要強制子類提供特定於類型的Equals
,請使用IEquatable<T>
接口:
IFilterViewMode : IEquatable<IFilterViewModel>
注意:即使您當前的代碼路徑不需要,也不要忘記實現GetHashCode
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.