Я пишу универсальный метод расширения для 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>);
}
Однако article.Map <
Проблема в том, что вывод типа для 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?