为什么通用方法不能推断参数类型?

use*_*278 4 c# generics

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,泛型方法接收lambda表达式作为参数(genMet(() => "Works");),并且从此lambda表达式方法能够推断出参数类型.

为什么方法也不能在下一个示例中推断出参数类型,而不是lambda表达式,我们将委托实例作为参数传递:

        genMet(new GenDel(() => "Doesn't work")); // Error: Using the generic type 'GenDel<T>' 
                                                  // requires 1 type arguments
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 8

类型推断仅适用于泛型方法,而不适用于泛型类型或其构造函数.