在下面的代码块中,我在Main中编号了四行。以下是我对他们的问题/评论:
产生以下编译器错误:
无法从用法推断出方法'ConsoleApplication1.FunctionExt.DelegateOf< T,R>(System.Func< T,R>)'的类型参数。尝试明确指定类型参数。
产生同样的错误:
方法'ConsoleApplication1.FunctionExt.ForwardCompose< T1,T2,R>(System.Func< T1,T2>,System.Func< T2,R>)'的类型参数不能从使用中推断出来。尝试明确指定类型参数。
我很感激为什么会出现3和4中的错误。
public static class FunctionExt
{
public static Func<T, R> DelegateOf<T, R>(Func<T, R> func)
{
return func;
}
public static Func<T1, R> ForwardCompose<T1, T2, R>(this Func<T1, T2> func1, Func<T2, R> func2)
{
return x => func2(func1(x));
}
}
public class Program
{
static int Squared(int n)
{
return n * n;
}
static int Plus5(int n)
{
return n + 5;
}
static Func<int, int> squared = Squared;
public static void Main()
{
// 1
Squared.ForwardCompose(Plus5);
// 2
squared.ForwardCompose(Plus5);
// 3
FunctionExt.DelegateOf(Squared).ForwardCompose(Plus5);
// 4
FunctionExt.ForwardCompose(Squared, Plus5);
}
}
答案 0 :(得分:0)
编译:
// 1
squared.ForwardCompose(Plus5);
// 2
squared.ForwardCompose(Plus5);
// 3
FunctionExt.DelegateOf(squared).ForwardCompose(Plus5);
// 4
FunctionExt.ForwardCompose(squared, Plus5);