示例#1
0
文件: RuleEngine.cs 项目: SinaC/RMUD
        /// <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));
        }
示例#2
0
        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));
        }