Vb.net 如何将lambda函数作为条件参数的默认值传递到常规函数中?

Vb.net 如何将lambda函数作为条件参数的默认值传递到常规函数中?,vb.net,Vb.net,以下是: Delegate Function OperationDelegate(ByVal x As Double) As Double Public Function test(Optional ByRef operation As OperationDelegate = AddressOf DefaultOperation) As Double Return operation.Invoke(3) End Function 给我一个错误:常量表达式是必需的。Addressof D

以下是:

Delegate Function OperationDelegate(ByVal x As Double) As Double
Public Function test(Optional ByRef operation As OperationDelegate = AddressOf DefaultOperation) As Double
    Return operation.Invoke(3)
End Function
给我一个错误:常量表达式是必需的。Addressof DefaultOperation导致使用Visual Studio 2013时出错

我尝试过用以下两种方法定义DefaultOperation

Public Function DefaultOperation(ByVal x As Double) As Double
    Return x
End Function

Dim DefaultOperation As OperationDelegate = Function(x As Double) As Double
                                                Return x
                                            End Function
无论哪种情况,它都没有起作用。 这是我一直在使用的资源:

无论如何,谢谢你的时间

我发现了一个类似的问题:


正如您在原始帖子上的评论所建议的,lambda不能用作可选参数

Delegate Function OperationDelegate(ByVal x As Double) As Double

Public Function test() As Double
   Return test(AddressOf OperationDelegate)
End Function

Public Function test(operation As OperationDelegate) As Double
   Return operation.Invoke(3)
End Function
另一种方法是使用不带参数的版本和带有委托参数的版本重载函数(在您的示例中为test)

Delegate Function OperationDelegate(ByVal x As Double) As Double

Public Function test() As Double
   Return test(AddressOf OperationDelegate)
End Function

Public Function test(operation As OperationDelegate) As Double
   Return operation.Invoke(3)
End Function

正如您从链接到的类似问题中所看到的。可选参数的默认值必须是常量(其值必须在编译时已知)。不可能是兰姆达。