从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()))
使用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是否相同。