如何将lambda函数作为条件参数的默认值传递给常规函数?

时间:2016-01-27 18:48:46

标签: 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

给我错误:需要常量表达式。 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

无论哪种情况都没有奏效。 这是我一直在使用的资源:https://msdn.microsoft.com/en-us/library/bb531253.aspx

无论如何,谢谢你的时间。

我发现了类似的问题:

1 个答案:

答案 0 :(得分:0)

正如原始帖子的评论中所建议的那样,lambda不能用作可选参数。

另一种方法是使用没有参数的版本和带有委托参数的版本重载函数(在您的示例中为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