我试图创建一个递归函数以返回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 Child
或Return Yield Child
一样使用它,但仍然出现错误。
通过在google或bing中搜索错误消息,我找不到与该问题相关的任何内容。如何解决该问题?
答案 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