Анализатор обнаружил небезопасное приведение ссылки, потенциально содержащей значение 'null', к значимому типу. Хотя в данном случае не происходит прямого разыменования, такое приведение типа приводит к выбросу 'NullReferenceException'.
Простейший пример получения такого исключения:
void Foo() { object b = null; var c = (bool)b; }
Исправленный код будет выглядеть так:
void Foo() { object b = null; var c = (bool)(b ?? false); }
Также предупреждение будет сгенерировано при приведении переменной с потенциальным 'null' значением к любому значимому типу, например, к структуре:
protected override void ProcessMessageAfterSend(....) { .... (DateTime)msg.GetMetadata(....); .... } public object GetMetadata(string tag) { object data; if (metadata != null && metadata.TryGetValue(tag, out data)) { return data; } return null; }
Диагностика проверила результат вызова метода 'GetMetadata' и обнаружила там потенциальный 'null'. В данном случае также стоило добавить проверку на null перед приведением типа:
protected override void ProcessMessageAfterSend(....) { .... (DateTime)(msg.GetMetadata(....) ?? new DateTime()); .... }
Данная диагностика классифицируется как:
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3148. |