Недавно я занимался дайвингом в лямбда-выражениях, и там была определенная функциональность, которую я хотел узнать, но просто не мог создать головы или хвосты.
Предположим, что в моем коде есть следующая логика:
List<A> foo; // assuming this is populated
string[] bar = foo.Select<A,string>(x => x.StringProperty).ToArray<string>();
Теперь я хочу, возможно, отвлечь всю эту операцию в методе обработчика, чтобы я мог это сделать:
string[] bar = MakeArray<A,string>(foo, x => x.StringProperty);
int[] foobar = MakeArray<A,int>(foo, x => x.IntegerProperty);
Как я могу начать писать этот метод? Я предвижу объявление подписи как-то вроде:
U[] MakeArray<T,U>( /* some lambda magic? */ ) where T : IEntity {}
но я не знаю, как указать, что я ожидаю выражение лямбда как аргумент метода, и как это точно преобразуется в тело метода.
Может ли кто-нибудь показать мне, как создать функцию MakeArray()
выше? Я почти уверен, что как только я увижу, как это сделать, я могу забрать его оттуда.
ИЗМЕНИТЬ
Как указано в комментариях, MakeArray()
нужна ссылка на IEnumerable<>
. Обновлено, чтобы отразить это.