Анализатор обнаружил потенциальную ошибку, которая может привести к доступу по нулевой ссылке.
Анализатор заметил в коде следующую ситуацию. Сначала объект базового класса приводится к производному классу с помощью оператора '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. |