我使用 this.session.Insert(object fact1)或 this.session.InsertAll(IEnumerable 方法将事实放入工作集中。
现在,事实之一发生了变化,我称之为 this.session.Replace(对象事实)。
NRules 如何知道要替换的对象?它是否比较引用是否相等?它是否称为Equals运算符?我猜您可能正在使用Dictionary逻辑,因此对象的 Equals()和 GetHashCode()确定两个事实何时相同,但在此之前需要确认我继续我的设计。
答案 0 :(得分:1)
在NRules中调用Update,UpdateAll,Retract或RetractAll时,引擎确实会在Dictionary中查找事实。因此,引擎使用对象的Equals和GetHashCode实现。
但是,如果更新/收回相同的对象实例,则不必重写Equals和GetHashCode,因为使用ReferenceEquals的引用类型的默认实现效果很好。