1

我想尝试在这里找到的一些简单代码:

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

但是我无法编译它,我一定是做错了什么。在页面的大约三分之一处,它给出了如下代码示例:

'使用 exManager.Process(Function() 方法名(param1, param2), _"异常策略名称")

但是如果我输入以下代码:

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

我在第三行收到一个错误,上面写着:

重载解决失败,因为无法使用这些参数调用可访问的“进程”:“公共可重写函数进程(TResult)(操作作为 System.Func(TResult),policyName As String)作为 TResult”:无法引用实例成员来自共享方法或共享成员初始化程序中的类,而没有该类的显式实例。

'Public Overridable Function Process(Of TResult)(action As System.Func(Of TResult), policyName As String) As TResult':无法从这些参数推断类型参数的数据类型。明确指定数据类型可能会更正此错误。

等等

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

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

我收到类似的错误。

任何意见将不胜感激。

更新:

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

4

1 回答 1

1

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

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

我猜你TestSub真的是 a Sub,因此没有编译器可以用来推断的返回值TResult


Process因此,通过使用Sub而不是使用非泛型方法Function

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

或干脆使用AddressOf

exManager.Process(AddressOf TestSub, "Exception Policy Name")
于 2013-02-25T08:50:43.910 回答