Как сессия NRules сравнивает факты?

Я помещаю факты в рабочий набор, используя методы this.session.Insert(object fact1) или this.session.InsertAll (IEnumerable fact).

Теперь один из фактов меняется, и я называю this.session.Replace(объектный факт).

Как NRules знает, какой объект заменить? Сравнивает ли это ссылки на равенство? Вызывает ли он оператор Equals? Я предполагаю, что вы, вероятно, используете словарную логику, поэтому Equals() и GetHashCode() объекта определяют, когда два факта совпадают, но мне нужно некоторое подтверждение, прежде чем я продолжу свой дизайн.

1 ответ

Решение

При вызове Update, UpdateAll, Retract или RetractAll в NRules механизм действительно просматривает факты в словаре. Итак, движок использует объектную реализацию Equals и GetHashCode.

Однако, если обновлять / убирать тот же экземпляр объекта, нет необходимости переопределять Equals и GetHashCode, потому что реализация по умолчанию для ссылочных типов, которая использует ReferenceEquals, работает просто отлично.

Другие вопросы по тегам