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
答案 0 :(得分:8)
类型推断仅适用于泛型方法,而不适用于泛型类型或其构造函数。
答案 1 :(得分:4)
您的第二个示例中没有类型推断 - 您明确指定要使用的委托类型。在这种情况下,您需要提供type参数,因为没有非泛型GenDel
类型。