作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有以下任务:
var task = _entityManager.UseRepositoryAsync(async (repo) =>
{
IEnumerable<Entity> found = //... Get from repository
return new
{
Data = found.ToList()
};
}
task
的类型是什么? ?
实际上,结果是:System.Threading.Tasks.Task<'a>
,
哪里'a
是匿名类型:{ List<object> Data }
如何在不使用 var
的情况下明确声明此类型?
我试过了Task<a'> task = ...
或 Task<object> task = ...
但无法对其进行编译。
我有一个方法(UseApplicationCache<T>
),需要一个Func<Task<T>>
作为参数。
我还有一个变量 cache
用户可能会设置为 true
或 false
.
如果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());
最佳答案
How can I explicitly state this type
你不能。匿名类型没有名称,因此不能明确提及。
如果您创建一个通用的辅助方法,则可以推断出匿名类型。在你的情况下,你可以这样做:
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
的“值”将被自动推断。
关于c# - 如何将匿名对象指定为泛型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32909980/
我是一名优秀的程序员,十分优秀!