Я пишу универсальный метод расширения для IEnumerable для отображения списка объектов в другой список отображаемых объектов.Вот как я хотел бы, чтобы метод работал:
IList<Article> articles = GetArticles();
return articles.Map<ArticleViewModel>(_mappingEngine);
Это метод:
public static IEnumerable<T2> Map<T1, T2>(this IEnumerable<T1> list, IMappingEngine engine)
{
return list.Select(engine.Map<T1, T2>);
}
Однако articles.Map<ArticleViewModel>(_mappingEngine);
выдает ошибку компиляции.Проблема в том, что вывод типа для T1 не работает.Я должен явным образом назвать его так:
articles.Map<Article, ArticleViewModel>(_mappingEngine);
Если я создаю метод расширения только с одним параметром T1, например:
public static IEnumerable<T1> DummyMap<T1>(this IEnumerable<T1> list, IMappingEngine engine)
{
return list;
}
Тогдаможно назвать так без указания T1:
articles.DummyMap(_mappingEngine);
Есть ли причина, по которой компилятор не может определить тип T1 в методе расширения для Map?