gpt4 book ai didi

C#:当有多个类型参数时,为什么泛型类型推断不起作用?

转载 作者:太空狗 更新时间:2023-10-30 00:26:49 25 4
gpt4 key购买 nike

这里有两个例子:

这很好用:

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);
}
}

这会引发以下错误:

Using the generic method 'QueryableExtensions.ProjectTo(System.Linq.IQueryable)' requires 2 type arguments

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 是什么,那么为什么它不仅需要无法推断的参数呢?

郑重声明,我在我的代码中很好地使用了第一个示例,但我更喜欢第二个示例的语法,并且在某些情况下我可能想要投影的通用类型。有什么办法可以做到这一点,还是我找错了树?

谢谢!

最佳答案

问题不在于 2 个参数,而在于:它会从哪里推断出来?泛型参数推断只看参数,具体不考虑返回类型。参数中没有任何暗示 P 的内容。要求泛型类型推断提供所有,或者所有这些都明确指定。有趣的是,曾经有人提到“含糊不清的打字”,正如我所解释的那样(因为它从未被完全定义)会让你像你想要的那样混合和匹配。想象一下:

blah.ProjectTo<?,SomeType>();

(确切的语法并不重要,因为这种语言特性不存在)——但这意味着“有 2 个 genericmtype 参数;你(编译器)找出第一个参数;第二个是 SomeType”。

关于C#:当有多个类型参数时,为什么泛型类型推断不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9354288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com