я звоню Sort
на List
:
List<Stuff> list = new List<Stuff>();
list.Sort(StuffSortByName);
с объявлением StuffSortByName
:
private static int StuffSortByName(Stuff x, Stuff y)
{
...
}
Что меня удивляет, так это то, что мой код компилируется и работает. Удивительно, что перегрузка Sort
не требует метода:
Так что мне повезло, так как я не хотел создавать целый объект, который реализует IComparer, просто для сортировки. Но что касается меня, я не понимаю, пока он собирается.
А теперь я хочу повторить эту магию. Я хочу отсортировать ListView. Но вы не сортируете список рассылки, вы предоставляете списку IComparer
через его ListViewItemSorter
свойство:
listView1.ListViewItemSorter = [IComparer]
И, опять же, я не хочу писать целый объект, я просто хочу передать локальный метод (и в идеале нестатический):
listView1.ListViewItemSorter = SortListView;
private static int SortListView(Object x, Object y)
{
....
}
Теперь, конечно, это не компилируется, потому что это не имеет смысла. Но тогда более ранний синтаксис также не должен компилироваться - но это так.
Так что это дает мне надежду, что у меня может быть такой же запутанный синтаксис здесь.
Как мне было разрешено передавать метод в качестве средства сравнения сортировки в первом случае, но не во втором?