2010-11-29 52 views
0

VB lambda表達式有代碼:爲子代表

Private Sub InsertItemInCache(Of T)(ByVal item As CachedItem(Of T), ByVal dependency As AggregateCacheDependency, _ 
ByVal key As String, ByVal updateCallBack As CacheItemUpdateCallback) 

的CacheItemUpdateCallback簽名是:

Sub CacheItemUpdateCallback(ByVal key As String, ByVal reason As CacheItemUpdateReason, _ 
    ByRef expensiveObject As Object, ByRef dependency As CacheDependency, ByRef absoluteExpiration As Date, _ 
    ByRef slidingExpiration As TimeSpan) 

我想用蘭巴表達這個調用InsertItemInCache功能。 此代碼不能編譯:

InsertItemInCache(cachedItem, dependency, key, Function(k, r, e, d, a, s) CacheItemUpdateCallback(k, r, e, d, a, s)) 

它說如果我改變表達不產生價值

子CacheItemUpdateCallback功能CacheItemUpdateCallback 它也不會被編譯並嵌套說函數不具有與委託相同的簽名'Delegate Sub CacheItemUpdateCallback(key As String,reason As System.Web.Caching.CacheItemUpdateReason,ByRef expensiveObject As Object,ByRe f依賴作爲System.Web.Caching.CacheDependency,ByRef absoluteExpiration作爲日期,ByRef slidingExpiration作爲System.TimeSpan)'

任何人都可以幫助我通過lambda表達式調用此方法嗎?我想在未來使用封閉,在這種方式調用這個函數:

InsertItemInCache(cachedItem, dependency, key, Function(k, r, e, d, a, s) CacheItemUpdateCallbackNew(k, r, e, d, a, s, additionalParameter1, additionalParameter2, additionalParameter3)) 
+0

http://stackoverflow.com/questions/4303377/vb-lambda-expression-for-sub-delegate的副本? – Maslow 2011-04-25 14:27:25

回答

1

我會猜測這是一個老vb.net作爲VB10與VS2010發佈能夠處理子lambda表達式,但你也有另一個問題。

沒有爲未來的倒閉......關注lambda表達式之前,這可能僅僅是

InsertItemInCache(cachedItem, dependency, key, AddressOf CacheItemUpdateCallback) 

所以主要問題是一個lambda表達式不能直接捕獲一個ref [VB中的ByRef]或從封閉的方法中取出參數。

+0

是的,這是正確的。我已經知道了。 – Egor4eg 2011-04-26 08:56:24