Как мне создать делегата для обычной функции списка? - PullRequest
2 голосов
/ 08 ноября 2011

У меня есть проект, который использует общий список пользовательских классов.У меня есть привязка к сетке, и я пытаюсь реализовать сортировку по ней.(который работает).

Я хочу очистить свой код, поэтому мне не нужно проверять «asc» и «desc», а затем вызывать Orderby или OrderByDescending.Я бы предпочел установить метод делегата для функции и просто вызвать OrderMethod, для которого уже был бы установлен правильный метод OrderBy ...

Кажется, я не могу заставить его работать.

Вот тот делегат, которого я создал.(Класс называется 'FollowInfo').

private delegate IOrderedEnumerable<FollowingInfo> OrderMethodDelegate<TSource, TKey>(IEnumerable<FollowingInfo> source, Func<FollowingInfo, string> keySelector);

Я пытаюсь установить его таким образом.

OrderMethodDelegate OrderMethod = FollowList.OrderBy;

Но это не работает ... в этом примере FollowListтипа List (FollowInfo).

Метод OrderBy является методом расширения класса универсального списка и определен в Enumerable как таковой.

public static IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey> keySelector);

Любые идеи о том, куда я ушелне так?

1 Ответ

2 голосов
/ 08 ноября 2011

Определите это как:

private delegate IOrderedEnumerable<TSource> Func<TSource, TKey>(IEnumerable<TSource> source, Func<TSource, TKey> keySelector);

Вы не можете просто переопределить общий метод, определенный в IEnumerable<T>, заменив параметр TSource. Он не знает о классе FollowInfo. Вы можете предоставить свой собственный метод расширения OrderBy для IEnumerable<FollowingInfo> и использовать в нем такой тип делегата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...