V3115. It is not recommended to throw exceptions from 'Equals(object obj)' method.
Анализатор обнаружил, что в переопределенном методе '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. |