无法获取lambda代码示例进行编译

时间:2013-02-24 13:00:01

标签: vb.net syntax lambda

我想尝试一下这里的一小段代码:

http://msdn.microsoft.com/en-au/library/ff664617%28v=pandp.50%29.aspx

但我无法编译,我一定做错了。在页面下方大约三分之一处,它提供了如下代码示例:

  

'用法exManager.Process(Function()method-name(param1,param2),_                      “例外政策名称”)

但如果我输入以下代码:

Dim exManager As ExceptionManager
exManager = EnterpriseLibraryContainer.Current.GetInstance(Of ExceptionManager)()
exManager.Process(Function() TestSub(), "Exception Policy Name")

我在第三行出错:

  

重载解析失败,因为无法访问“进程”   用这些参数调用:       '公共可覆盖函数进程(Of TResult)(action as System.Func(Of TResult),policyName As String)as TResult':不能   从共享方法或内部引用类的实例成员   共享成员初始值设定项,没有类的显式实例。

     

'公共可覆盖函数进程(Of TResult)(action as System.Func(Of TResult),policyName As String)As TResult':Data   类型参数的类型不能从这些推断出来   参数。明确指定数据类型可能会纠正此问题   错误。

     

即使我尝试像这样修改lambda:

exManager.Process(Function() Dim A As Integer=6, "Exception Policy Name")

我得到了类似的错误。

任何意见都将不胜感激。

更新

注意我正在编译.NET Framework 4 Client Profile

1 个答案:

答案 0 :(得分:1)

当您致电Process(Of TResult)时,您正在使用exManager.Process(Function() TestSub(), "Exception Policy Name")重载。

该方法是通用的,期望和类型参数(TResult),在很多情况下可以由编译器推断。现在异常告诉您,在您的情况下,编译器可以推断TResult

我猜你的TestSub实际上是Sub因此没有返回值,编译器可以使用它来推断TResult


因此,请使用Process代替Sub

来使用非通用Function方法
exManager.Process(Sub() TestSub(), "Exception Policy Name")

或只是使用AddressOf

exManager.Process(AddressOf TestSub, "Exception Policy Name")