【问题标题】:VB lambda expression for sub delegate子委托的VB lambda表达式
【发布时间】:2010-11-29 20:15:38
【问题描述】:

有代码:

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)

我想为此使用lamba 表达式调用InsertItemInCache 函数。 此代码未编译:

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

它说表达式不会产生值

如果我将 Sub CacheItemUpdateCallback 更改为 Function CacheItemUpdateCallback 它也没有被编译并且说 嵌套函数没有与委托相同的签名 'Delegate Sub CacheItemUpdateCallback(key As String, reason As System.Web.Caching.CacheItemUpdateReason, ByRef luckyObject As Object, ByRef dependency As System.Web .Caching.CacheDependency, ByRef absoluteExpiration As Date, ByRef slipExpiration As System.TimeSpan)'

谁能帮我通过 lambda 表达式调用这个方法?我想将来使用闭包并以这种方式调用此函数:

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

【问题讨论】:

标签: vb.net


【解决方案1】:

这个怎么样?

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

我认为这只适用于 VB.Net 2010。据我所知,早期版本不支持 Sub lambdas。

【讨论】:

  • @Egor4eg 我认为在 VS2008 中你唯一的选择是重写代码以便你可以使用Function lambdas。也许编写一个包装器Function,它采用与CacheItemUpdateCallback 相同的参数。它会调用CacheItemUpdateCallback,然后返回True。您还可以为 InsertItemInCache 编写一个包装器,该包装器需要包装器函数的委托。然后你可以使用Function lambdas。这是否值得取决于您。
  • 谢谢!我只是想确保 VB 语法不允许以简单的方式执行此操作。我可能会使用包装器或其他东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 2015-03-06
  • 2012-08-27
相关资源
最近更新 更多