重载List.Sort

时间:2011-08-26 13:34:57

标签: .net override ilist

我需要排序List(Of MyObject)。所以我确保实施IComparableIEquatableIEqualityComparerIComparer,排序工作正常。

该项目有了新的要求。排序列表不能包含“重复”对象。在这种情况下,重复与为排序目的定义重复的方式略有不同。我创建了一个新例程,它将检查两个对象并返回首选对象。首选的是除了一个之外所有值都相同的那个,并且最后一个值是最大值。我已经使这个例程运作良好。

现在我想通过创建一个继承IList(Of MyObject)然后重写Sort方法以首先删除'重复'然后使用{{进行排序'的对象来解决这个'删除重复'问题1}}作为IComparable的接口通常会自行排序。但是,我不知道该怎么做。到目前为止,我所读到的内容似乎无法实现。我知道我可以通过创建一个单独的例程List或类似的东西来解决这个问题,但我想知道是否可以覆盖。

编辑:根据以下建议,我决定不覆盖SortWithRemove,而是使用扩展方法。这是我的代码:

Sort

2 个答案:

答案 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...
    }
}