树结构的条件遍历,给action增加额外的参数

Conditional traversal of a tree structure, adding extra parameter to action

我有一个具有遍历函数的树结构,遍历函数将在每一层执行一个动作:

public void Traverse(Action<ILayer> action)
        {
            action(this);
            foreach (var child in children)
                child.Traverse(action);
        }

但是我发现自己要编写这样的代码:

    private List<ILayer> filteredList = new List<ILayer>();
    private string condition;
    void AddLayerIf(ILayer layer)
    {
        if (layer.Type == "condition")
            filteredList.Add(layer);
    }

    void main()
    {
        filteredList.Clear();
        condition = "Image";
        rootLayer.Traverse(AddLayerIf);
        List<ILayer> allImageLayers = filteredList;
    }

这感觉完全不对。我可以将这两个变量作为参数发送而不是将它们设置为全局变量吗?还是我缺少更好的技巧?我开始将动作写成 lambda,但也不确定这是否正确

我做了一些 lambda,感觉好多了!任何关于改进欢迎的建议:)

ILayer imageLayers= new ImageFolder("Images");

rootLayer.Traverse(
    (ILayer x) =>
    {
        if (x.Type == "Image")
            imageLayers.AddChild(x);
    });