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()); }
/// <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()); }