查看以下函数,它需要另一个具有输出类型的 FunctionT
并简单地调用它返回结果:
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
关键字可以在定义匿名函数(作为参数传递)时使用,但不能用于声明参数类型。换句话说,您可以将传递称为CallFunction
匿名委托Func<T>
本身是一个代表:第二次替代尝试缺少委托的通用参数(与in 中
MyLambda
的操作相同):Func<T>
T CallFunction<T>(Func<T> lambda)