Анализатор обнаружил, что в переопределенном методе 'Equals(object obj)' возможно возникновение исключения.
Рассмотрим пример. Пусть у нас имеется метод следующего вида:
public override bool Equals(object obj) { return obj.GetType() == this.GetType(); }
В том случае, если аргумент 'obj' будет нулевым (null) - это повлечет за собой исключение 'NullReferenceException'. Вероятнее всего программист не предусмотрел подобную ситуацию при реализации данного метода. Для корректной работы можно использовать проверку на 'null':
public override bool Equals(object obj) { if (obj == null) return false; return obj.GetType() == this.GetType(); }
Другой пример плохой практики при реализации метода 'Equals(object obj)' - явное выбрасывание исключения из этого метода. Рассмотрим следующий пример:
public override bool Equals(object obj) { if (obj == null) throw new InvalidOperationException("Invalid argument."); return obj == this; }
Высока вероятность, что данный метод будет вызван пользователем в месте, не подразумевающем возможности возникновения и обработки исключений.
Если один из объектов не соответствует условиям сравнения, лучше будет вернуть 'false':
public override bool Equals(object obj) { if (obj == null) return false; return obj == this; }
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3115. |