2012-12-10 64 views
4
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 

回答

8

类型推断仅应用于一般方法 ,而不是泛型类型或它们的构造函数。

+0

因此,如果这些方法的参数是封闭构造类型的实例,那么泛型方法只能推断参数类型?换句话说,GenMet方法的作用不是“告诉”GenDel委托什么是GenDel的参数类型? – user1483278

+1

@ user1483278皮特认为,'GenDel'永远无法推断出它的通用参数,因为它是一个构造函数。它需要是一种推断它的通用参数的方法。 – Servy

+0

对于迟到的回复,我表示歉意。谢谢你们的帮助 – user1483278

4

在第二个示例中没有类型推断 - 您明确地给出要使用的委托类型。在这种情况下,您需要提供类型参数,因为没有非通用的GenDel类型。

相关问题