假设我有以下任务:
var task = _entityManager.UseRepositoryAsync(async (repo) =>
{
IEnumerable<Entity> found = //... Get from repository
return new
{
Data = found.ToList()
};
}
是什么类型的task
?
事实上,事实证明是:System.Threading.Tasks.Task<'a>
,
where 'a
是匿名类型:{ List<object> Data }
我怎样才能在不使用的情况下明确声明这种类型var
?
我努力了Task<a'> task = ...
or Task<object> task = ...
但无法对其进行编译。
为什么我需要这样做?
我有一个方法(UseApplicationCache<T>
),这需要一个Func<Task<T>>
作为参数。
我也有一个变量cache
用户可能会设置为true
or false
.
If true
,应该调用上述方法,我的task
应该作为参数传递,如果false
,我应该执行我的task
而不将其作为该方法的参数。
我的最终结果会是这样的:
Func<Task<?>> fetch = () => _entityManager.UseRepositoryAsync(async (repo) =>
{
IEnumerable<Entity> found = //... Get from repository
return new { Data = found.ToList() };
}
return await (cache ? UseApplicationCache(fetch) : fetch());
我如何明确声明这种类型
你不能。匿名类型没有名称,因此不能显式提及。
如果您创建通用帮助器方法,则可以推断匿名类型。对于你的情况,你可以这样做:
static Func<TAnon> InferAnonymousType<TAnon>(Func<TAnon> f)
{
return f;
}
这样你就可以这样做:
var fetch = InferAnonymousType(() => _entityManager.UseRepositoryAsync(async (repo) =>
{
IEnumerable<Entity> found = //... Get from repository
return new { Data = found.ToList() };
}
));
return await (cache ? UseApplicationCache(fetch) : fetch());
的价值TAnon
会自动推断。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)