Анализатор обнаружил возможную ошибку в переопределённом методе 'Equals', связанную с проверкой неверного типа.
Рассмотрим пример:
private class FirstClass { .... public override bool Equals(object obj) { SecondClass other = obj as SecondClass; // <= if (other == null) { return false; } return Equals(other); } public bool Equals(FirstClass other) { .... } }
В переопределённом методе 'Equals' класса 'FirstClass' допущена ошибка при проверке типа 'obj': вместо 'SecondClass' должен быть 'FirstClass'.
В результате ошибки, если в переопределённый метод 'Equals' будет передан объект типа 'FirstClass', метод будет всегда возвращать 'false'.
Более того, если передать в качестве параметра объект типа 'SecondClass', тогда будет вызван этот же переопределённый метод 'Equals'. Это приведёт к рекурсии и выбрасыванию исключения типа 'StackOverflowException'.
Исправленный вариант:
private class FirstClass { .... public override bool Equals(object obj) { FirstClass other = obj as FirstClass; if (other == null) { return false; } return Equals(other); } }
Данная диагностика классифицируется как: