IEnumerable<IConversion> Combination(INavigator navigator, IConversion startFeature = null) { var startType = Source; if(startFeature != null) startType = navigator.End(startFeature); foreach(var feature in AllFeatures.Where(feature => navigator.Start(feature) == startType)) { var destination = navigator.End(feature); if(_foundTypes.Contains(destination)) continue; _foundTypes.Add(destination); var newFeature = navigator.Combine(startFeature, feature); if(newFeature == null) continue; yield return newFeature; _newFeatures.Add(newFeature); } }