为什么这样:
Private [Function] As Func(Of Double, String) = Function(ByRef z As Double) z.ToString
给出以下错误:
嵌套函数没有与委托字符串兼容的签名)'。
虽然这个:
Private [Function] As Func(Of Double, String) = Function(ByVal z As Double) z.ToString
不是吗? (区别是ByRef / ByVal)
此外,我怎么能实现这样的事情呢?
答案 0 :(得分:11)
您收到此错误,因为委托类型功能(ByVal z As Double)As String 与功能(ByRef z As Double)As String 不兼容。你需要完全匹配。
此外,您无法使用ByRef参数( ref 或 out 在C#中)声明 Func(Of ...)泛型委托,无论你是否使用匿名功能。
但是你可以声明你委托的类型,然后使用你的匿名函数
Delegate Function ToStringDelegate(ByRef value As Double) As String
Sub Main()
Dim Del As ToStringDelegate = Function(ByRef value As Double) value.ToString()
End Sub
或者您可以使用隐式类型(如果启用了Option Infer)
Dim Del = Function(ByRef value As Double) value.ToString()
答案 1 :(得分:6)
在MSDN上,它提到以下规则适用于lambda表达式中的变量范围: