c# - 一般编写扩展的正确方法是什么?

标签 c# generics extension-methods

我见过用几种不同的方式为泛型编写类扩展的例子。我要使用 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);
    }
}

哪个更好?为什么?第一个是否正确?

最佳答案

不,第一个不正确。扩展方法必须在顶级静态非通用类中定义。

此外,我建议也遵守类型参数的命名约定:

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);
    }
}

关于c# - 一般编写扩展的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6796479/

相关文章:

Swift:如何创建全局扩展以在任何地方使用 Double 或 Int?

带有默认值的 C# LINQ SelectMany

c# - 我正在使用 dll 的头文件在 c# 中为 c++ 编写包装器库,但无法弄清楚如何转换类型。

c# - 使用 EF Core 查询中的方法

android - 我用于 Retrofit 接口(interface)创建的通用函数出现编译器错误 : inferred type is Class<T>?,但需要 Class<T!>

c# - 如何使用 Ninject 泛型将接口(interface)绑定(bind)到类?

c# - 生成错误 - Roslyn MSB3883 : Unexpected exception: System. IO.FileNotFoundException for System.Security.Principal.Windows

c# - 事件日志写入错误

c# - 关于 StructLayoutAttribute 中 sizeof(T) 的 CS0233 有什么替代方案吗?

c# - 获得一个无参数的方法来像 Func<Return>