public static FilterResult Evaluate(ItemCraft item, FilterCondition condition) { //call ParseProperties and ParseItem here and pass the results so they don't have to be repeatedly called during evaluation return(condition.Evaluate(item, ItemParser.ParseProperties(item), ItemParser.ParseItem(item))); }