I would delegate this logic to separate IRecipie classes:
if (Pancake.CanBeMadeBy(stuff, cook)) { return new Pancake("Yum"); } .... public class Pancake: IRecipe { ... public static bool CanBeMadeBy(IEnumerable<Ingredientes> stuff, Cook cook) { return stuff.Any(s=>s.Eggs && s.Flour && s.Sugar) && cook.DinerCook; } }
Edit in response to comment
To find all the recipes that can be prepared, simply follow these steps:
List<IRecipe> results = new List<IRecipe>(); if (Pancake.CanBeMadeBy(stuff, cook)) { results.Add(new Pancake("Yum"); } ....
Edit 2 In addition, if you keep a list of all possible recipes somewhere, you can turn CanBeMadeBy into an instance method instead of a static one and do this:
List<IRecipe> allRecipes =
source share