查看以下函数,它需要另一个具有输出类型
T
的函数,并简单地调用它返回结果:
T CallFunction<T>(Func<T> lambda)
{
return lambda();
}
我希望我可以用
Func<T> lambda
替换 delegate T lambda<T>()
。然而这似乎不可能,我不能做这样的事情:
T CallFunction<T>(delegate T lambda<T>())
{
return lambda();
}
或:
delegate T MyLambda<T>();
T CallFunction<T>(MyLambda lambda)
{
return lambda();
}
只是我的语法错误还是我还没有完全理解 Delegate 和 Func 是什么? 在这种情况下,
Func<T> lambda
不就是一个返回类型 T
的委托吗?
你就快到了,
lambda
是一个通用委托,你必须提供通用参数
delegate T MyLambda<T>();
T CallFunction<T>(MyLambda<T> lambda)
{
return lambda();
}
注意
T CallFunction<T>(MyLambda<T> lambda)
而不是你的
T CallFunction<T>(MyLambda lambda)
Func<T>
本身就是委托:
public delegate TResult Func<out TResult>();
第二个替代品缺少委托的通用参数:
T CallFunction<T>(MyLambda<T> lambda)
{
return lambda();
}