2

我有一个类Parent,它的属性ItemsList(of Child)

如果我使用此代码

Parallel.ForEach()(parent.Items,
            Sub(item)
                item.DoSomething()
            End Sub)

我收到编译器警告No overload for method ForEach() accepts this count of arguments

如果我将代码更改为

Parallel.ForEach(of Child)(parent.Items,
            Sub(item)
                item.DoSomething()
            End Sub)

有用。

但是,在 c# 中我可以只写

Parellel.ForEach(parent.Items, item =>
    {
        item.DoSomething();
    });

为什么VB在这种情况下不推断?

4

2 回答 2

5

在您的第一个 VB 示例中,您有一组额外的括号,因此您正在调用 .ForEach 没有参数。删除它们,它将起作用:

Parallel.ForEach(parent.Items,
         Sub(item)
            item.DoSomething()
         End Sub)
于 2012-07-06T06:41:15.097 回答
3

如果您希望 VB 编译器推断类型参数,则不提供类型参数(Of )括号:

Parallel.ForEach(parent.Items,
        Sub(item)
            item.DoSomething()
        End Sub)

以同样的方式,就好像您希望 C# 编译器推断类型一样,您不提供类型参数<>尖括号。

该错误试图告诉您,VB 编译器在您的第一个示例中看到的是ForEach带参数的调用,然后调用第一次调用的返回值。()

于 2012-07-06T06:41:33.570 回答