如何将2个泛型类型传递给扩展方法

AAA*_*ddd 6 c# generics extension-methods

我创建了以下扩展方法

public static T Map<TEntity,T>(this TEntity entity) where TEntity : IEntity
{
    return Mapper.Map<TEntity, T>(entity);        
}
Run Code Online (Sandbox Code Playgroud)

这允许以下内容

Db.ExchangeSets.FirstOrDefault().Map<ExchangeSet, ExchangeSetSimpleViewModel>()
Run Code Online (Sandbox Code Playgroud)

但是我想知道无论如何我可以修改扩展方法,所以我可以调用如下的短路版本

Db.ExchangeSets.FirstOrDefault().Map<ExchangeSetSimpleViewModel>()
Run Code Online (Sandbox Code Playgroud)

请注意 :

是否应该像这样使用automapper不在问题的范围内,它更像是一个事实发现任务


更新

对于那些在家里玩的人,在scotts评论的帮助下,我设法找到一个额外的解决上述功能的通用扩展方法为automapper

public static T Map<T>(this IEntity entity) 
{
    return (T)Mapper.Map(entity, entity.GetType(), typeof(T));  
}
Run Code Online (Sandbox Code Playgroud)

但是除了AutoMapper之外,这不是实际问题的答案,而是相应地标记优点

m-y*_*m-y 2

如果您想知道为什么这是不可能的,我认为问题在于含糊不清:

public static T Map<TEntity,T>(this TEntity entity) where TEntity : IEntity
{
    return Mapper.Map<TEntity, T>(entity);        
}

public static T Map<T>(this ExchangeSet set)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

那么,哪个方法被调用呢?请记住,这只是一个简单的示例。未来很有可能会实现部分类型推断,但我想,当涉及到重载解析时,它会太混乱,并且成本/收益将完全失控。话又说回来,这只是猜测。