任务本质:绕过树(preorder),但是不能返回正常的IEnumerable<VisualElement>
,只返回第一个元素,循环到此结束。该算法是正确的,因为如果将方法设为 void 而不是yield return root
done Console.WriteLine(root)
,那么所有内容都会以正确的顺序显示。
public static IEnumerable<VisualElement> GetChildren(VisualElement root)
{
yield return root;
if (root?.Children != null)
foreach (var child in root.Children)
{
GetChildren(child);
}
}
当然,您可以添加一个字段List<VisualElement>
,然后yield return
将其添加到集合中,但是这种方法对我来说似乎很糟糕,因为当您再次运行该方法时,它将List
是非空的。
递归
也就是说,还需要使用枚举器从子调用中提取值
只需要注意这个递归是尾的,可以优化为一个循环,完全摆脱递归。