带有附加Param的C#IComparable IComparer

时间:2016-09-27 17:58:47

标签: c#

如何实施IComparer

int CompareTo(object obj)

附加参数,例如

int CompareTo(object obj, Dictionary<int, int> preferences)

首选项是包含IdNumberOfClicks<int, int>

的字典

我想要的是将categoryId的内容与字典中的点击次数进行比较,

示例Cat 1有3次点击,Cat 2有6次点击。

通过比较排序 preferences[this.CategoryId].value > preferences[object.CategoryId].value

因此,它们按类别排序,但与Dictionary相关。

2 个答案:

答案 0 :(得分:5)

您无法将额外参数传递给IComparer的{​​{1}}方法,因为方法签名必须与界面中的签名匹配。

您可以做的是使用额外参数构造Compare的实例,将其存储在实例中,并根据需要在IComparer内使用:

CompareTo

答案 1 :(得分:0)

创建一个单独的比较器类来实现IComparer<T>,而不是让类型本身实现IComparable,并让它在其构造函数中接受Dictionary。然后,比较器可以在比较对象的实例时使用字典。