在 C# 中,如何用函数参数中的委托替换 Func?

问题描述 投票:0回答:2

查看以下函数,它需要另一个具有输出类型

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();
}

只是我的语法错误还是我还没有完全理解 DelegateFunc 是什么? 在这种情况下,

Func<T> lambda
不就是一个返回类型
T
的委托吗?

c# delegates parameter-passing func
2个回答
0
投票

你就快到了,

lambda
是一个通用委托,你必须提供通用参数

delegate T MyLambda<T>();

T CallFunction<T>(MyLambda<T> lambda)
{
  return lambda();
}

注意

T CallFunction<T>(MyLambda<T> lambda)

而不是你的

T CallFunction<T>(MyLambda lambda)

0
投票

Func<T>
本身就是委托:

public delegate TResult Func<out TResult>();

第二个替代品缺少委托的通用参数:

T CallFunction<T>(MyLambda<T> lambda)
{
   return lambda();
}

© www.soinside.com 2019 - 2024. All rights reserved.