/// <summary> /// Consider a perform rulebook. First, check every argument for matching rules. Finally, check global rules. /// A perform rulebook continues execution until a rule returns PerformResult.Stop. /// </summary> /// <param name="Name"></param> /// <param name="Arguments"></param> /// <returns></returns> public PerformResult ConsiderPerformRule(String Name, params Object[] Arguments) { //A single null value passed to a params argument is interpretted by C# as a null Object[] //reference, not as an array with a single element that is null. if (Arguments == null) { Arguments = new Object[] { null } } ; foreach (var ruleset in EnumerateRuleSets(Arguments)) { if (ruleset.ConsiderPerformRule(Name, Arguments) == PerformResult.Stop) { return(PerformResult.Stop); } } if (Rules == null) { throw new InvalidOperationException(); } return(Rules.ConsiderPerformRule(Name, Arguments)); }
public PerformResult ConsiderPerformRule_Enum(String Name, Func <Object[], IEnumerable <RuleSet> > RuleSetEnumerator, params Object[] Arguments) { if (Arguments == null) { Arguments = new Object[] { null } } ; foreach (var ruleset in RuleSetEnumerator(Arguments)) { if (ruleset.ConsiderPerformRule(Name, Arguments) == PerformResult.Stop) { return(PerformResult.Stop); } } if (Rules == null) { throw new InvalidOperationException(); } return(Rules.ConsiderPerformRule(Name, Arguments)); }