Анализатор обнаружил потенциальную ошибку, которая может привести к доступу по нулевой ссылке.
Анализатор заметил в коде следующую ситуацию. Сначала объект базового класса приводится к производному классу с помощью оператора 'as'. А затем этот же объект проверяется на значение null, хотя в этом случае скорее всего предполагалось проверить на null объект производного класса.
Рассмотрим следующий пример. Здесь возможна ситуация, когда объект baseObj не будет являться экземпляром класса Derived. В этом случае при вызове функции Func программа упадёт с NullReferenceException. Анализатор выдаст предупреждение на этот код, указав две строки. Первая строка - это то место, где объект базового класса проверяется на null. Вторая строка - это то место, где объект базового класса приводится к объекту производного класса.
Base baseObj; Derived derivedObj = baseObj as Derived; if (baseObj != null) { derivedObj.Func(); }
Скорее всего в этом примере предполагалось проверить на null объект производного класса перед использованием. Исправленный вариант кода:
Base baseObj; Derived derivedObj = baseObj as Derived; if (derivedObj != null) { derivedObj.Func(); }
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3019. |