Tuesday, March 29, 2011

Flatten objects tree structure


Flatten objects tree structure:



protected IEnumerable<T> Flatten<T>(IEnumerable<T> elements, Func<T, IEnumerable<T>> childrenFunc)
        {
            List<T> result = new List<T>();
            result.AddRange(elements);
            
            IEnumerable<T> children = elements.SelectMany(childrenFunc);
            
            if (children.Count() == 0)
            {
                return result;
            }

            result.AddRange(this.Flatten<T>(children, childrenFunc));

            return result;
        }