Diese Erweiterungsmethode ist in der Lage die Sub-Elemente einer Auflistung, und deren Sub-Elemente usw., linear aufzulisten.
Mit kleinen Erweiterungen der Funktion kann das Beispielsweise bei hierarchischen Strukturen (TreeView o.ä.) ganz Hilfreich sein.
Benötigte Namespaces
System
System.Collections.Generic
/// <summary>
/// Listet alle Elemente und deren Sub-Elemente auf.
/// </summary>
/// <typeparam name="T">Der Typ der Elemente.</typeparam>
/// <param name="source">Die Quellliste mit Sub-Elementen.</param>
/// <param name="selector">Eine Funktion, welche die Sub-Element-Liste eines Elements ausw�hlt.</param>
/// <param name="deep">Die Anzahl der Ebenen, die aufgelistet werden sollen.</param>
/// <returns>Eine Liste mit allen Elementen und Sub-Eelenten.</returns>
public static IEnumerable<T> SelectSubItems<T>(this IEnumerable<T> source, Func<T, IEnumerable<T>> selector, int deep)
{
foreach (var item in source)
{
yield return item;
if (deep > 1)
foreach (var subItem in SelectSubItems(selector(item), selector, deep - 1))
yield return subItem;
}
}
Kommentare zum Snippet