遍历层次结构对象c#
如果我有类似下面的类。 我如何遍历它直到其属性SomeObjects.count = 0
public class SomeObject { public String Name { get; set; } public List SomeObjects { get; set; } }
非常感谢
以下是如何遍历复合对象的一般示例:
public static class TraversalHelper{ public static void TraverseAndExecute(this T composite, Func> selectChildren, Action action) where T: class { action.Invoke(composite); composite.TraverseAndExecute(selectChildren, action, new List { composite }); } private static void TraverseAndExecute (this T composite, Func> selectChildren, Action action, IList invokedComponents) where T: class { invokedComponents = invokedComponents ?? new List (); var components = selectChildren(composite) ?? new T[]{}; foreach(var component in components){ // To avoid an infinite loop in the case of circular references, ensure // that you don't loop over an object that has already been traversed if(!invokedComponents.Contains(component)){ action.Invoke(component); invokedComponents.Add(component); component.TraverseAndExecute (selectChildren, action, invokedComponents); } else{ // the code to execute in the event of a circular reference // would go here } } } }
以下是一个示例用法:
public class Program{ public static void Main(){ var someObject = new SomeObject { Name = "Composite", SomeObjects = new List{ new SomeObject{ Name = "Leaf 1" }, new SomeObject{ Name = "Nested Composite", SomeObjects = new List { new SomeObject{Name = "Deep Leaf" }} } } }; someObject.TraverseAndExecute( x => x.SomeObjects, x => { Console.WriteLine("Name: " + x.Name); } ); } }
这是一种树状结构; 有很多算法可以遍历它,你可以搜索树遍历算法 ,你会发现很多算法 。