Beispiel #1
0
        public override void Evaluate()
        {
            ExpressionEvaluator e = new ExpressionEvaluator();

            e.GetEvidence += new EvidenceLookupHandler(RaiseEvidenceLookup);
            e.Postfix      = this.postfixExpression;
            ExpressionEvaluator.Symbol o = e.Evaluate(); //PERFORMANCE: this method is slow.

            base.EvidenceValue.Reset();                  //clear previous values

            //result must be of this type or the expression is invalid, throw exception
            IEvidenceValue result = o.value as IEvidenceValue;

            //exit if null returned
            if (o.type == ExpressionEvaluator.Type.Invalid)
            {
                return;
            }

            //see if its value has changed, if so then set the value and call the events
            if (base.Value.Equals(result.Value))
            {
                return; //no change in value, dont raise an event
            }
            base.Value = result.Value;
            RaiseChanged(this, new ChangedArgs());
        }
Beispiel #2
0
        /// <summary>
        /// 核心计算
        /// </summary>
        public override void Evaluate()
        {
            ExpressionEvaluator e = new ExpressionEvaluator();

            e.GetEvidence += new EvidenceLookupHandler(RaiseEvidenceLookup);
            e.Postfix      = this.postfixExpression;
            ExpressionEvaluator.Symbol o = e.Evaluate(); //PERFORMANCE: this method is slow.

            base.EvidenceValue.Reset();                  //清空之前数据

            //result must be of this type or the expression is invalid, throw exception
            // 结果是IEvidenceValue类型,或者表达式为无效的,则抛出异常
            IEvidenceValue result = o.value as IEvidenceValue;

            //exit if null returned
            if (o.type == ExpressionEvaluator.Type.Invalid)
            {
                return;
            }

            // 值被改变了则调用事件
            if (base.Value.Equals(result.Value))
            {
                return;                //no change in value, dont raise an event
            }
            base.Value = result.Value; // 此方法,引发false时规则条件表达式中的引用为0
            RaiseChanged(this, new ChangedArgs());
        }