在VB.NET中使用Yield时出错-方法参数必须放在括号中

时间:2018-06-29 14:18:42

标签: .net vb.net ienumerable yield

我试图创建一个递归函数以返回IEnmerable(Of Control)中控件的所有后代。我创建了一个返回IEnumerable(Of Control)的函数,并使用了Yield

Public Function GetControls(C As Control) As IEnumerable(Of Control)
    For Each Child As Control In C.Controls
        Yield Child
        For Each GrandChild In GetControls(Child)
            Yield GrandChild
        Next
    Next
End Function

但是我有一个编译时错误:

  

错误BC30800,方法参数必须用括号括起来。

我试图像功能Yield(Child)Yield Return ChildReturn Yield Child一样使用它,但仍然出现错误。

通过在google或bing中搜索错误消息,我找不到与该问题相关的任何内容。如何解决该问题?

1 个答案:

答案 0 :(得分:6)

在VB.NET中使用Yield语句时,该函数应定义为Iterator

Public Iterator Function GetControls(C As Control) As IEnumerable(Of Control)
    For Each Child As Control In C.Controls
        Yield Child
        For Each GrandChild In GetControls(Child)
            Yield GrandChild
        Next
    Next
End Function