0

我在 c# 中有一个简单的 lambda 表达式。现在我需要将它转换成 vb 但无法让它工作 - 得到一个错误,说“运算符'='没有为类型'T'和'T'定义。有人能告诉我我做错了什么吗?

有效的 C# 代码:

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

我的 VB 转换不起作用:

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

2 回答 2

4

使用Sub代替Function

ThreadPool.QueueUserWorkItem(New WaitCallback(Sub(obj) svc = svcft.CreateChannel()))
于 2013-07-23T14:04:40.673 回答
1

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

Public Sub Foo() As String
End Sub

因为如果你有一个返回类型,它是一个函数,而不是一个子。与 Lambda 类似,您必须使用 Sub 或 Function 关键字,具体取决于您是否有返回值。这在比较与分配方面存在细微差别。考虑以下两个 lambda:

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

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

于 2013-07-23T15:15:16.683 回答