2015-09-10 100 views
1

使用转换器(展鹏,Telerik的,...)之后,我不能把这个表达式C#来vb.netC#表达拉姆达到VB.NET

if (afterItemRemoved != null) 
     { 
      cacheItemPolicy.RemovedCallback = x => afterItemRemoved(
       x.CacheItem.Key, 
       (T)x.CacheItem.Value); 
     } 

我曾尝试没有成功下列表达式(反射器8.5代展鹏Ÿconverter.telerik.com)

If (afterItemRemoved IsNot Nothing) Then 
    cacheItemPolicy.RemovedCallback = x => afterItemRemoved.Invoke(x.CacheItem.Key, DirectCast(x.CacheItem.Value, T)) 
End If 


If afterItemRemoved IsNot Nothing Then 
    cacheItemPolicy.RemovedCallback = Function(x) afterItemRemoved(x.CacheItem.Key, DirectCast(x.CacheItem.Value, T)) 
End If 
+1

您已经试过什么样子从原来的完全不同。为什么函数名称在你的尝试中不同? – DarkKnight

+0

是两种类似的方法,是一种转录错误。谢谢你的评论。 –

+1

将“!=”(C#)转换为“>”(VB.NET)的工具肯定不是太有用。 – varocarbas

回答

3

望着文档RemovedCallback我们可以看到,所需要的委托签名是void方法(在VB.Net一Sub)(见CacheEntryRemovedCallback)。

所以需要lambda表达式必须是一个“子LAMBDA”而不是“功能拉姆达”

If afterItemRemoved IsNot Nothing Then 
    cacheItemPolicy.RemoveCallback = 
     Sub(x) afterItemRemoved(x.CacheItem.Key, DirectCast(x.CacheItem.Value, T)) 
End If 
+0

谢谢Sehnsucht。 –