首页 > 解决方案 > NRules 会议如何比较事实?

问题描述

我使用this.session.Insert(object fact1)this.session.InsertAll(IEnumerable<object> fact)方法将事实放入工作集中。

现在,其中一个事实发生了变化,我称之为this.session.Replace(object fact)

NRules如何知道要替换哪个对象?它是否比较平等的参考?它是否调用 Equals 运算符?我猜您可能正在使用 Dictionary 逻辑,因此对象的Equals()GetHashCode()确定两个事实何时相同,但在继续我的设计之前我需要一些确认。

标签: nrules

解决方案


在 NRules 中调用 Update、UpdateAll、Retract 或 RetractAll 时,引擎确实会在 Dictionary 中查找事实。因此,引擎使用对象的 Equals 和 GetHashCode 实现。

但是,如果更新/撤回相同的对象实例,则不必重写 Equals 和 GetHashCode,因为使用 ReferenceEquals 的引用类型的默认实现可以正常工作。


推荐阅读