条件遍历树结构,为操作添加额外参数

时间:2015-02-27 14:27:42

标签: c# lambda tree action

我有一个具有Traverse函数的树结构,遍历函数采取它将在每一层执行的操作:

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,但不确定是否正确

1 个答案:

答案 0 :(得分:1)

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

ILayer imageLayers= new ImageFolder("Images");

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