我想创建一个匿名函数,它接受一个源,并允许我指定一个目标,我对它有一些问题。它抱怨我的目标是“类型”,这是有道理的,但我不确定如何解决它。
下面是函数:
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);
}我是这样称呼它的:
var data = ReadService(() => Services.CServices.CUsers(), typeof(CustomViewModel));我期望数据是CustomViewModel类型的。
我在这里做错了什么?
发布于 2016-06-03 05:31:45
不完全清楚你想要做什么,但我怀疑你需要传递一个视图模型本身,而不是视图模型的类型:
var data = ReadService(() => Services.CServices.CUsers(), new CustomViewModel());或者让AutoMapper为您创建一个:
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());
}但是请注意,泛型参数不能从返回类型中推断出来,因此您必须在调用该方法时指定它:
var data = ReadService<CUser,CustomViewModel>(() => Services.CServices.CUsers());发布于 2016-06-03 05:45:19
我认为你在这里混淆了一些概念:
当您调用ReadService(() => Services.CServices.CUsers(), typeof(CustomViewModel))时,泛型类型TDest将为System.Type,因为这是typeof返回的结果。
因此,ReadService的返回类型是System.Type,您试图从IWebApiServiceResponse<...>映射到System.Type,而不是CustomViewModel。
要解决此问题,您可以执行以下操作:
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());https://stackoverflow.com/questions/37602197
复制相似问题