У меня есть общий набор:
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>
?