2013-02-24 36 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