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