首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用AutoMapper的匿名函数

使用AutoMapper的匿名函数
EN

Stack Overflow用户
提问于 2016-06-03 05:12:46
回答 2查看 288关注 0票数 0

我想创建一个匿名函数,它接受一个源,并允许我指定一个目标,我对它有一些问题。它抱怨我的目标是“类型”,这是有道理的,但我不确定如何解决它。

下面是函数:

代码语言:javascript
复制
    public TDest ReadService<TSrc,TDest>(Func<IWebApiServiceResponse<TSrc>> func, TDest dest)
    {
        // i will be doing other functionality in here, error logging, etc
        return Mapper.Map(func(), dest);
    }

我是这样称呼它的:

代码语言:javascript
复制
var data = ReadService(() => Services.CServices.CUsers(), typeof(CustomViewModel));

我期望数据是CustomViewModel类型的。

我在这里做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2016-06-03 05:31:45

不完全清楚你想要做什么,但我怀疑你需要传递一个视图模型本身,而不是视图模型的类型:

代码语言:javascript
复制
var data = ReadService(() => Services.CServices.CUsers(), new CustomViewModel());

或者让AutoMapper为您创建一个:

代码语言:javascript
复制
public TDest ReadService<TSrc,TDest>(Func<IWebApiServiceResponse<TSrc>> func)
{
    // i will be doing other functionality in here, error logging, etc
    return Mapper.Map<IWebApiServiceResponse<TSrc>, TDest>(func());
}

但是请注意,泛型参数不能从返回类型中推断出来,因此您必须在调用该方法时指定它:

代码语言:javascript
复制
var data = ReadService<CUser,CustomViewModel>(() => Services.CServices.CUsers());
票数 1
EN

Stack Overflow用户

发布于 2016-06-03 05:45:19

我认为你在这里混淆了一些概念:

当您调用ReadService(() => Services.CServices.CUsers(), typeof(CustomViewModel))时,泛型类型TDest将为System.Type,因为这是typeof返回的结果。

因此,ReadService的返回类型是System.Type,您试图从IWebApiServiceResponse<...>映射到System.Type,而不是CustomViewModel

要解决此问题,您可以执行以下操作:

代码语言:javascript
复制
public TDest ReadService<TSrc, TDest>(Func<IWebApiServiceResponse<TSrc>> func)
{
    var type = typeof(TDest); //If you need the System.Type of TDest

    ...
    return Mapper.Map<TDest>(func());
}

var data = ReadService</*source type*/, CustomViewModel>(() => Services.CServices.CUsers());
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37602197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档