Как сессия NRules сравнивает факты?
Я помещаю факты в рабочий набор, используя методы this.session.Insert(object fact1) или this.session.InsertAll (IEnumerable.
Теперь один из фактов меняется, и я называю this.session.Replace(объектный факт).
Как NRules знает, какой объект заменить? Сравнивает ли это ссылки на равенство? Вызывает ли он оператор Equals? Я предполагаю, что вы, вероятно, используете словарную логику, поэтому Equals() и GetHashCode() объекта определяют, когда два факта совпадают, но мне нужно некоторое подтверждение, прежде чем я продолжу свой дизайн.
1 ответ
При вызове Update, UpdateAll, Retract или RetractAll в NRules механизм действительно просматривает факты в словаре. Итак, движок использует объектную реализацию Equals и GetHashCode.
Однако, если обновлять / убирать тот же экземпляр объекта, нет необходимости переопределять Equals и GetHashCode, потому что реализация по умолчанию для ссылочных типов, которая использует ReferenceEquals, работает просто отлично.