这是两个示例:
这工作正常:
void Main()
{
var list = Queryable.ProjectTo(typeof(Projection));
}
public static class QueryableExtensions
{
public static ProjectionList<T> ProjectTo<T>(this IQueryable<T> queryable, Type projectionType)
{
return new ProjectionList<T>(queryable, projectionType);
}
}
这会引发以下错误:
使用通用方法
'QueryableExtensions.ProjectTo(System.Linq.IQueryable)'
需要 2 个类型参数
void Main()
{
var list = Queryable.ProjectTo<Projection>();
}
public static class QueryableExtensions
{
public static ProjectionList<T, P> ProjectTo<T, P>(this IQueryable<T> queryable)
{
return new ProjectionList<T, P>(queryable);
}
}
当然,第一个示例需要 1 个类型参数,但是编译器可以找出它是什么,所以我不需要提供任何类型参数。第二个示例需要 2 个类型参数,但编译器知道 T 是什么,那么为什么它不仅需要无法推断的类型参数呢?
根据记录,我在代码中使用第一个示例就很好,但我更喜欢第二个示例的语法,并且可能在某些情况下我希望拥有投影的通用类型。有什么办法可以实现这一点还是我找错了树?
Thanks!
问题不在于这两个参数,而在于:它从哪里推断出来?泛型参数推断仅查看参数,具体不考虑返回类型。参数中没有任何内容表明 P。要求泛型类型推断提供all其中,或全部都被明确指定。有趣的是,曾经提到过“mumble-typing”,按照我的解释(因为它从未被完全定义),它可以让你按照你想要的方式混合和匹配。想象:
blah.ProjectTo<?,SomeType>();
(确切的语法并不重要,因为这种语言功能不存在) - 但这意味着“有 2 个 genericmtype 参数;你(编译器)计算出第一个参数;第二个是 SomeType”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)