Как сессия NRules сравнивает факты? - PullRequest
0 голосов
/ 13 марта 2019

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

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

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

1 Ответ

1 голос
/ 13 марта 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...