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
4

2 回答 2

8

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

于 2012-12-10T18:23:00.390 回答
4

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

于 2012-12-10T18:24:18.693 回答