/// <summary> /// Applies the conditions to a fact to obtain the an executed consequence /// </summary> /// <param name="fact">The fact to apply the rules to</param> /// <returns>Executed chosen consequence</returns> public virtual TOutput ExecuteFact(TFact fact) { var validRules = RuleList.Select(rule => rule.Value) .Where(rule => rule.Condition(fact)); if (validRules.Any()) { return(Prioritizer.GetHighestPriorityOutput(validRules, fact)); } else { return(default(TOutput)); } }