树结构的条件遍历,给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);
});
我有一个具有遍历函数的树结构,遍历函数将在每一层执行一个动作:
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);
});