遍历层次结构对象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); } ); } } 

这是一种树状结构; 有很多算法可以遍历它,你可以搜索树遍历算法 ,你会发现很多算法 。