У меня есть общая коллекция:
public Items : Collection<Object>
{
protected override void InsertItem(int index, Object item)
{
base.InsertItem(index, item);
...
}
protected override void RemoveItem(int index)
{
base.RemoveItem(index);
...
}
protected override void SetItem(int index, Object item)
{
base.SetItem(index, item);
...
}
protected override void ClearItems()
{
base.ClearItems();
...
}
Теперь мне нужен способ сортировки этой коллекции на месте.
Бонусная болтовня
Я пытался преобразовать свой класс в List<T>
вместо Collection<T>
(поскольку Collection<T>
не поддерживает концепцию заказа) Тогда это позволило вызвать метод Sort
:
this.Items.Sort(SortCompareCallback);
protected virtual int SortCompareCallback(Object x, Object y)
{
return OnCompareItems(new SortCompareEventArgs(x, y, this.sortColumnIndex, direction));
}
Но тогда я теряю виртуальные методы при изменении списка.
Я думал об использовании Linq, но проблема в этом:
- Я не знаю, как вызвать обратный вызов из выражения Linq
- Linq не сортирует коллекцию, она может вернуть только новую
Как мне отсортировать универсальный Collection<T>
?