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之外,这不是实际问题的答案,而是相应地标记优点
如果您想知道为什么这是不可能的,我认为问题在于含糊不清:
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)
那么,哪个方法被调用呢?请记住,这只是一个简单的示例。未来很有可能会实现部分类型推断,但我想,当涉及到重载解析时,它会太混乱,并且成本/收益将完全失控。话又说回来,这只是猜测。
| 归档时间: |
|
| 查看次数: |
1984 次 |
| 最近记录: |