Вывод типа проблема при написании универсального метода расширения с более чем одним типом

Я пишу универсальный метод расширения для 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?

5
задан Can Gencer 9 March 2011 в 09:17
поделиться