我想尝试一下这里的一小段代码:
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
答案 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")