我有一个具有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,但不确定是否正确
答案 0 :(得分:1)
我做了一些感觉好多了的lambda!关于改善欢迎的任何建议:)
ILayer imageLayers= new ImageFolder("Images");
rootLayer.Traverse(
(ILayer x) =>
{
if (x.Type == "Image")
imageLayers.AddChild(x);
});