在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"得到一个错误信息。
不能在泛型类中使用扩展方法。相反,让方法泛型,并保持类非泛型。
例如: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());