Language: C#
Traverse Extension Sample App
class Program { static void Main() { var list = new List<MyClass> {new MyClass(10), new MyClass(20)}; foreach(var l in list) { l.MyList = new List<MyClass> {new MyClass(10)}; } var total = list.Traverse(x => x.MyList).Sum(x => x.Val); Console.WriteLine(total); Console.ReadLine(); } } public static class MyExtensions { //The Traverse extension can be added to types of IEnumerable<T>. //Returns T //Input Param //"fnRecurse" - delegate with one parameter T and returns IEnumerable<T> public static IEnumerable<T> Traverse<T> (this IEnumerable<T> source, Func<T, IEnumerable<T>> fnRecurse) { foreach (T item in source) { yield return item; var seqRecurse = fnRecurse(item); if (seqRecurse != null) { //Making Recursive call to Traverse using //results from the lambda expression foreach (T itemRecurse in Traverse(seqRecurse, fnRecurse)) { yield return itemRecurse; } } } } } public class MyClass { public MyClass(int val) { Val = val; } public int Val; public List<MyClass> MyList = new List<MyClass>(); }
Report Abuse
Subscribe
Discuss
What's new
What is it
New Snippet
Recent Snippets
My Snippets
Web Code
Search

