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

时间:2012-12-10 18:20:16

标签: 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");
    }
}

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

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

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

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

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