Exemple #1
0
    public IEnumerable <T> DependenciesDeep(T node)
    {
        var discoveredDeps = new KeyedCollection <string, T>(_getKey);

        IEnumerable <T> InnerDescendentDeps(T n)
        {
            var childDeps = Dependencies(n).ToList();

            foreach (var dep in childDeps.Where(c => !discoveredDeps.Contains(c)))
            {
                yield return(discoveredDeps.AddItem(dep));
            }

            foreach (var dep in childDeps.SelectMany(InnerDescendentDeps))
            {
                yield return(dep);
            }
        }

        foreach (var dep in InnerDescendentDeps(node))
        {
            yield return(dep);
        }
    }