【问题标题】:Why can't VB Parallel.ForEach not infer my loop item type?为什么 VB Parallel.ForEach 不能推断我的循环项目类型?
【发布时间】:2012-07-06 14:46:47
【问题描述】:

我有一个类Parent,它的属性为Items,即List(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 在这种情况下不推断?

【问题讨论】:

  • 您能否更具体地说明参数类型,使用Sub(item As Child)

标签: c# vb.net generics task-parallel-library type-inference


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    同样,如果您希望 C# 编译器推断类型,您不需要提供类型参数 <> 尖括号。

    错误试图告诉您,VB 编译器在您的第一个示例中看到的是使用 no 参数调用 ForEach () 跟随对第一次调用的返回值的调用。

    【讨论】:

    • shf301 是第一个,但无论如何 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多