从c到vb的Lambda表达式

本文关键字:Lambda 表达式 vb | 更新日期: 2023-09-27 18:24:35

我在c#中有一个简单的lambda表达式,它可以工作。现在我需要把它转换成vb,但无法让它工作-得到一个错误,说"oprator"="不是为类型"t"answers"t"定义的。有人能告诉我我做错了什么吗?

有效的C#代码:

ThreadPool.QueueUserWorkItem(new WaitCallback(
(obj) =>
{
    svc = svcft.CreateChannel()
}))

我的VB转换不起作用:

ThreadPool.QueueUserWorkItem(New WaitCallback(Function(obj) svc = svcft.CreateChannel()))

从c到vb的Lambda表达式

使用Sub而不是Function:

ThreadPool.QueueUserWorkItem(New WaitCallback(Sub(obj) svc = svcft.CreateChannel()))

更多信息。在C#中,lambda并不关心body是否有返回值。在VB中,您必须在Lambda中显式,就像在方法签名中一样。例如,在VB中,您不能执行以下操作:

Public Sub Foo() As String
End Sub

因为如果你有一个返回类型,它是一个Function,而不是Sub。与Lambda类似,你必须使用Sub或Function关键字,这取决于你是否有返回值。这在比较和分配方面有着微妙的区别。考虑以下两个λ:

Dim y as Integer
Dim assign = Sub(x) y = x
Dim compare = Function(x) y = x

在第一种情况下,y将被赋予x的值。在第二种情况中,lambda将返回true/false,这取决于y和x是否相同。