public static IEnumerable <TreeSetNode> BuildTreeSetList <T>(this IEnumerable <T> items, Func <T, string> name, Func <T, int> treeSetNodeId, Func <T, bool> check = null, string icon = null) where T : NestedTree { IList <TreeSetNode> list = new List <TreeSetNode>(); items = EnSureList(items); IList <T> list2 = (items as IList <T>) ?? items.ToList(); using (IEnumerator <T> enumerator = list2.GetEnumerator()) { while (enumerator.MoveNext()) { T item = enumerator.Current; T t = list2.FirstOrDefault(delegate(T m) { int arg_23_0 = m.Depth; T item2 = item; int arg_6F_0; if (arg_23_0 == item2.Depth - 1) { int arg_46_0 = m.Left; item2 = item; if (arg_46_0 < item2.Left) { int arg_69_0 = m.Right; item2 = item; arg_6F_0 = ((arg_69_0 > item2.Right) ? 1 : 0); return(arg_6F_0 != 0); } } arg_6F_0 = 0; return(arg_6F_0 != 0); } ); if (t == null) { T node = item; List <TreeSetNode> children = ( from m in list2 where m.Left > node.Left && m.Right < node.Right select m).BuildTreeSetList(name, treeSetNodeId, check, null).ToList(); TreeSetNode item3 = new TreeSetNode { TreeSetNodeId = treeSetNodeId(item), Name = name(item), Checked = check != null && check(item), Children = children, IconSkin = icon }; list.Add(item3); } } } return(list); }
public virtual T Visit(TreeSetNode node, T state) { return(DefaultVisit(node, state)); }