NRules Session 如何比较事实?

How does an NRules Session compare facts?

我使用 this.session.Insert(object fact1)this.session.InsertAll(IEnumerable事实上) 方法。

现在,其中一个事实发生了变化,我调用 this.session.Replace(对象事实)

NRules 如何知道要替换哪个对象?它比较引用是否相等?它会调用 Equals 运算符吗?我猜你可能正在使用字典逻辑,所以对象的 Equals()GetHashCode() 确定两个事实何时相同,但在继续我的设计之前我需要一些肯定。

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

但是,如果 updating/retracting 相同的对象实例,则没有必要覆盖 Equals 和 GetHashCode,因为使用 ReferenceEquals 的引用类型的默认实现工作得很好。