我在c#中有一个简单的lambda表达式。现在我需要将它转换为vb但无法使其工作 - 得到一个错误,说“oprator'='没有为类型'T'和'T'定义。有人可以告诉我我做错了什么吗?
有效的C#代码:
ThreadPool.QueueUserWorkItem(new WaitCallback(
(obj) =>
{
svc = svcft.CreateChannel()
}))
我的VB转换不起作用:
ThreadPool.QueueUserWorkItem(New WaitCallback(Function(obj) svc = svcft.CreateChannel()))
答案 0 :(得分:4)
使用Sub
代替Function
:
ThreadPool.QueueUserWorkItem(New WaitCallback(Sub(obj) svc = svcft.CreateChannel()))
答案 1 :(得分:1)
更多信息。在C#中,lambda不关心身体是否有返回值。在VB中,您必须在Lambda中明确表达,就像在方法签名中一样。例如,在VB中,您无法执行以下操作:
Public Sub Foo() As String
End Sub
因为如果你有一个返回类型,它是一个函数,而不是一个子函数。与Lambda类似,您必须使用Sub或Function关键字,具体取决于您是否有返回值。这在比较与分配方面存在细微差别。考虑以下两个lambdas:
Dim y as Integer
Dim assign = Sub(x) y = x
Dim compare = Function(x) y = x
在第一种情况下,y将被赋值为x。在第二种情况下,lambda将返回true / false,具体取决于y和x是否相同。