【发布时间】:2014-06-11 21:45:19
【问题描述】:
我正在尝试将以下方法转换为 IEnumerable 上的扩展方法:
private static IEnumerable<TTarget> MapList<TSource, TTarget>(IEnumerable<TSource> source)
{
return source.Select(
element =>
_mapper.Map<TSource, TTarget>(element)
).ToList();
}
现在是这样称呼的:
var sourceList = new List<SourceType>();
return MapList<SourceType, TargetType>(sourceList);
但我想这样称呼它:
var sourceList = new List<SourceType>();
return sourceList.MapTo<TargetType>();
我试过这样做:
public static IEnumerable<TTarget> MapTo<TTarget>(this IEnumerable<TSource> source)
{
return source.Select(
element =>
Mapper.Map<TSource, TTarget>(element)
).ToList();
}
但我得到类型或命名空间 TSource 未找到,因为它不包含在方法的类型参数列表中。我可以让它像这样工作:
public static IEnumerable<TTarget> MapTo<TSource, TTarget>(this IEnumerable<TSource> source)
{
return source.Select(
element =>
Mapper.Map<TSource, TTarget>(element)
).ToList();
}
但我必须这样称呼它:
var sourceList = new List<SourceType>();
sourceList.MapTo<SourceType, TargetType>();
我觉得没有sourceList.MapTo<TargetType>()那么清楚。
有什么方法可以做我想做的事吗?
【问题讨论】:
标签: c# generics extension-methods