从c#到vb的Lambda表达式

时间:2013-07-23 14:01:52

标签: c# vb.net lambda

我在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()))

2 个答案:

答案 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是否相同。