public IEnumerable <TransformerPath> FindPaths <TTo>(List <TransformerGraph> exclusions = null) { if (exclusions == null) { exclusions = new List <TransformerGraph>(); } exclusions.Add(this); if (Transformer.CanTransformInto <TTo>()) { return new TransformerPath[] { new TransformerPath(Transformer) } } ; var paths = NextNodes .Where(node => !exclusions.Contains(node)) .SelectMany(p => p.FindPaths <TTo>(exclusions.ToList())) .ToArray(); foreach (var path in paths) { path.AddFirst(Transformer); } return(paths); } }