using System.Collections.Generic; using System.Linq; namespace SharpMap.Api.Layers { public static class LayerExtensions { public static void DisposeLayersRecursive(this ILayer layer, bool disposeDataSource = true) { var disposableLayers = GetLayersRecursive(layer).ToList(); foreach (var disposableLayer in disposableLayers) { disposableLayer.Dispose(disposeDataSource); } } private static IEnumerable GetLayersRecursive(this ILayer layer) { if (layer is T) { yield return (T) layer; } var groupLayer = layer as IGroupLayer; if (groupLayer == null) { yield break; } foreach (var typedLayer in groupLayer.Layers.SelectMany(GetLayersRecursive)) { yield return typedLayer; } } } }