view MetroWpf/MetroWpf.Framework/Extensions/LinqExtensions.cs @ 16:2395908fa45b

Getting there... 1.20am at BKK airport. MainWindow and Menu now have VMs, Login form is displayed first
author stevenh7776 stevenhollidge@hotmail.com
date Wed, 14 Mar 2012 01:23:18 +0700
parents 060f02cd4591
children
line wrap: on
line source

using System;
using System.Collections.Generic;
using System.Linq.Expressions;

namespace MetroWpf
{
    public static class LinqExtensions
    {
        #region · Extensions ·

        /// <summary>
        /// Traverses the specified source.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="source">The source.</param>
        /// <param name="fnRecurse">The fn recurse.</param>
        /// <returns></returns>
        public static IEnumerable<T> Traverse<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> fnRecurse)
        {
            foreach (T item in source)
            {
                yield return item;

                IEnumerable<T> seqRecurse = fnRecurse(item);

                if (seqRecurse != null)
                {
                    foreach (T itemRecurse in Traverse(seqRecurse, fnRecurse))
                    {
                        yield return itemRecurse;
                    }
                }
            }
        }

        #endregion
    }
}