2013-02-24 37 views
1

我想在这里找到一个简单的代码位进行实验:无法获得拉姆达代码示例编译

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

但我不能得到它来编译,我必须做一些错误的。关于一路下跌的页面第三,它提供了代码示例如下:

“用法exManager.Process(功能()方法名(参数1,参数2)_ ‘异常策略名称’)

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

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

我得到第三行一个错误,指出:

重载解析失败,因为没有可访问的'Process'可以使用以下参数调用 : 'TResult'的公共可重写函数进程(作为System.Func(作为TResult),作为TResult'):不能 从共享方法或 共享成员初始值设定项中引用类的实例成员,而不显示该类的实例。

'公共可重写的函数过程(的TResult)(作为System.Func(的TResult),policyName作为字符串)作为TResult':数据 类型参数(s)的类型不能从这些 参数。明确指定数据类型可能会纠正此错误。

即使我尝试修改拉姆达这样的:

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

,我收到了类似的错误。

任何意见,将不胜感激。

UPDATE:

注意我编译为.NET Framework 4的客户端配置文件

+0

是保持进程管理器代码的功能的共享subrotine? – user1937198 2013-02-24 13:13:18

+0

@ user1937198实际上它是,但我然后把它放在一个非共享函数,它没有区别 – TripleAntigen 2013-02-25 08:16:06

回答

1

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

该方法是通用的,并且期望并输入参数(TResult),这在很多情况下都可以被编译器推断出来。现在异常告诉你,在你的情况下,编译器可以推断出TResult

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


所以通过代替或者使用SubFunction

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

或简单地使用非通用Process方法使用AddressOf

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

顺便说一句,你链接的页面上的VB.Net代码示例是废话。 – sloth 2013-02-25 08:55:52