我需要排序List(Of MyObject)
。所以我确保实施IComparable
,IEquatable
,IEqualityComparer
和IComparer
,排序工作正常。
该项目有了新的要求。排序列表不能包含“重复”对象。在这种情况下,重复与为排序目的定义重复的方式略有不同。我创建了一个新例程,它将检查两个对象并返回首选对象。首选的是除了一个之外所有值都相同的那个,并且最后一个值是最大值。我已经使这个例程运作良好。
现在我想通过创建一个继承IList(Of MyObject)
然后重写Sort
方法以首先删除'重复'然后使用{{进行排序'的对象来解决这个'删除重复'问题1}}作为IComparable
的接口通常会自行排序。但是,我不知道该怎么做。到目前为止,我所读到的内容似乎无法实现。我知道我可以通过创建一个单独的例程List
或类似的东西来解决这个问题,但我想知道是否可以覆盖。
编辑:根据以下建议,我决定不覆盖SortWithRemove
,而是使用扩展方法。这是我的代码:
Sort
答案 0 :(得分:3)
不要更改List.Sort
的语义(我假设你的意思是,而不是IList.Sort
,这不存在)。如果你这样做,你就违反了方法的合同。
如果您需要在排序时删除重复项,请为此编写适当的新方法,例如SortWithoutDuplicates
。你打算做什么打破了Liskov substitution principle。
答案 1 :(得分:1)
创建Extension Method以处理排序和删除重复项可能是有意义的。
public static class Extensions
{
public static void SortAndRemoveDuplicates<T>(this IList<T> list) where T is IComparable
{
// add magic here...
}
}