![]() |
1
2
如果您只想要一个带有命名参数的固定委托类型,那么您可以定义自己的委托类型: Func的定义如下:
因此,可以使用所需的参数名定义自己的委托类型。 但是在您的示例中,您希望保留传入的委托类型,因此在这里不起作用。理论上你可以这样定义你的函数:
不幸的是,没有好的泛型约束将输入类型限制为具有正确签名的委托(甚至根本就没有委托)。但是如果没有这些约束,实现将变得非常糟糕,并且您将失去如此多的静态类型安全性,以至于IMO不值得这样做。 一种解决方法是:
或者您可以执行以下操作:
顺便说一下,甚至在.net 4之前,ConvertDelegate函数也可以用于获取委托的协/反方差。 |
![]() |
2
1
通过将新构造的委托动态绑定到基础Func delegate方法,可以强制转换为具有命名参数的委托:
|
![]() |
3
0
这就是匿名代表的魅力所在;他们是匿名的。Func是一个方法的委托,它接受一个int并返回一个int。函数实际做什么,因此参数的名称,是不相关的。 唯一可行的方法是,如果Calc是命名委托类型,定义的签名与CalcPriv相同。它仍然可以像写的那样工作,包括匿名扩展,但是你有一个Calc的命名参数。
传递信息的另一种方法是使用
最后,你可以从
|
![]() |
nanounanue · 使用python和高级操作符的函数管道 6 年前 |
![]() |
Zazaeil · 这个特定的递归可以用尾部优化的方式重写吗? 6 年前 |
![]() |
corvid · 使用ramda通过变量进行升序/降序 6 年前 |
![]() |
CodingNow · Scala:如何制作多种方法并逐一应用? 6 年前 |