# V3019. It is possible that an incorrect variable is compared with null after type conversion using 'as' keyword.

Анализатор обнаружил потенциальную ошибку, которая может привести к доступу по нулевой ссылке.

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

Данная диагностика классифицируется как:

CWE-697

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3019.