【发布时间】:2011-03-09 08:59:30
【问题描述】:
我正在为 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);
是否有原因导致编译器无法在 Map 的扩展方法中推断 T1 的类型?
【问题讨论】:
标签: c# generics c#-3.0 extension-methods