在c#中声明泛型静态方法

本文关键字:泛型 静态方法 声明 | 更新日期: 2023-09-27 17:52:11

是否有任何方法在c#中声明一个通用的静态方法?
例如:

public static class Class<T,P> 
    where T:class
    where P:class
{
    public static T FromTtoP (this P ob)
    {
    ...
    }
}

这段代码不起作用。我想从DTO映射到DAL,反之亦然。

我已经尝试使类非泛型

public static class Class
{
    public static TDTO MapToDTO<TDTO, TDAL>(this TDAL dal)
                where TDTO : class
                where TDAL : class
            {
            }
}

我从"this"得到一个错误信息。

在c#中声明泛型静态方法

不能在泛型类中使用扩展方法。相反,让方法泛型,并保持类非泛型。

例如:

public static class MyExtensions
{
  public static T ConvertToT<T, P>(this P ob)
    where T : class
    where P : class
  {
    // ...
  }
}

当然,这并不能很好地工作-没有办法推断方法调用的参数,这使得这种方法毫无用处。

@luaan我不同意"有点没用"的说法。部分。我们用它在一个基控制器类中创建一个泛型映射器,它非常有用:

    public static DTOClass MightyMap<DTOClass, SourceClass>(SourceClass obj)
        where DTOClass : class
        where SourceClass : class
    {
        var dto = (DTOClass)Activator.CreateInstance(typeof(DTOClass));
        dto.InjectFrom(obj); //Using Omu.ValueInjecter
        return dto;
    }

像这样使用:

IQueryable<MyEntity> query = somequery;    
var mappedItems = (await query.Select(f=> MightyMap<MyDTO, MyEntity>(f)).ToListAsync());