private Reaction RecursiveFunction(Reaction reaction) { var oreAmount = 0; var listMaterialsToBeProcessed = reaction.InputMaterials; var outputReactions = Reactions.Where(x => listMaterialsToBeProcessed.Select(y => y.Type).Contains(x.OutputMaterials.FirstOrDefault().Type)).ToList(); foreach (var outputreaction in outputReactions) { var amount = outputreaction.OutputMaterials.FirstOrDefault().Quantity; //if (amount > ) // for (int i = 0; i < amount; i++) //{ reaction.AddReaction(RecursiveFunction(outputreaction)); //} InputReactions.AddRange(reaction.InputReactions); } return(reaction); }