我已经看过以几种不同的方式为泛型编写类扩展的示例。我将以AutoMapper为例。
1)
public static class Extensions<Src, Tgt>
{
public static Tgt TransferData(this Src source)
{
AutoMapper.Mapper.CreateMap<Src, Tgt>();
return AutoMapper.Mapper.Map<Src, Tgt>(source);
}
}
2)
public static class Extensions2
{
public static Tgt TransferData<Src, Tgt>(this Src source)
{
AutoMapper.Mapper.CreateMap<Src, Tgt>();
return AutoMapper.Mapper.Map<Src, Tgt>(source);
}
}
哪个更好?为什么?第一个甚至是正确的吗?
答案 0 :(得分:7)
不,第一个不正确。扩展方法必须在顶级静态非泛型类中定义。
此外,我建议遵守类型参数的命名约定:
public static class Extensions2
{
public static TTarget TransferData<TSource, TTarget>(this TSource source)
{
AutoMapper.Mapper.CreateMap<TSource, TTarget>();
return AutoMapper.Mapper.Map<TSource, TTarget>(source);
}
}