为什么通用方法不能推断参数类型?
问题描述:
public delegate T GenDel<T>();
class Program
{
public static void genMet<T>(GenDel<T> d) { }
static void Main(string[] args)
{
genMet(new GenDel<string>(() => "Works"));
genMet(() => "Works");
}
}
在上例中,泛型方法接收lambda表达式作为参数(genMet(() => "Works");
),并且从此lambda表达式方法可以推断出参数类型。为什么通用方法不能推断参数类型?
为什么不是方法也能够推断参数类型在下面的例子中,在那里,而不是lambda表达式,我们通过一个委托实例作为一个参数:
genMet(new GenDel(() => "Doesn't work")); // Error: Using the generic type 'GenDel<T>'
// requires 1 type arguments
答
类型推断仅应用于一般方法 ,而不是泛型类型或它们的构造函数。
答
在第二个示例中没有类型推断 - 您明确地给出要使用的委托类型。在这种情况下,您需要提供类型参数,因为没有非通用的GenDel
类型。
因此,如果这些方法的参数是封闭构造类型的实例,那么泛型方法只能推断参数类型?换句话说,GenMet方法的作用不是“告诉”GenDel委托什么是GenDel的参数类型? – user1483278
@ user1483278皮特认为,'GenDel'永远无法推断出它的通用参数,因为它是一个构造函数。它需要是一种推断它的通用参数的方法。 – Servy
对于迟到的回复,我表示歉意。谢谢你们的帮助 – user1483278