nrules - NRules 会议如何比较事实?
问题描述
我使用this.session.Insert(object fact1)或this.session.InsertAll(IEnumerable<object> fact)方法将事实放入工作集中。
现在,其中一个事实发生了变化,我称之为this.session.Replace(object fact)。
NRules如何知道要替换哪个对象?它是否比较平等的参考?它是否调用 Equals 运算符?我猜您可能正在使用 Dictionary 逻辑,因此对象的Equals()和GetHashCode()确定两个事实何时相同,但在继续我的设计之前我需要一些确认。
解决方案
在 NRules 中调用 Update、UpdateAll、Retract 或 RetractAll 时,引擎确实会在 Dictionary 中查找事实。因此,引擎使用对象的 Equals 和 GetHashCode 实现。
但是,如果更新/撤回相同的对象实例,则不必重写 Equals 和 GetHashCode,因为使用 ReferenceEquals 的引用类型的默认实现可以正常工作。
推荐阅读
- python - 如何知道 Keras 在哪里打印详细信息?
- c# - .NET 核心 Web API,如何更改使用 IAsyncEnumerable 时返回的 XML 的根名称?
- ruby-on-rails - 如何输出带有散列数组的动态表
- django - 如何在使用 django 发送电子邮件时应用背景图片
- c# - .Net Entity Framework Core 具有外键的唯一索引
- java - Spring Boot 应用程序 - java.lang.OutOfMemoryError 问题:超出 GC 开销限制
- javascript - 如何使用 JQuery 从另一个页面上的文本字段值单击按钮时填充不同页面的文本字段?
- powershell - nvm更改节点版本后Powershell无法识别npm
- javascript - 将绘图多轴修改为动态多轴javascript
- php - 注意:未定义的变量:函数中的链接