﻿# V3148\. Casting potential 'null' value to a value type can lead to NullReferenceException\.

Анализатор обнаружил небезопасное приведение ссылки, потенциально содержащей значение 'null', к значимому типу\. Хотя в данном случае не происходит прямого разыменования, такое приведение типа приводит к выбросу 'NullReferenceException'\.

Простейший пример получения такого исключения:

```cpp
void Foo()
{
  object b = null;
  var c = (bool)b;
}
```

Исправленный код будет выглядеть так:

```cpp
void Foo()
{
  object b = null;
  var c = (bool)(b ?? false);
}
```

Также предупреждение будет сгенерировано при приведении переменной с потенциальным 'null' значением к любому значимому типу, например, к структуре:

```cpp
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 перед приведением типа:

```cpp
protected override void ProcessMessageAfterSend(....)
{
  ....
  (DateTime)(msg.GetMetadata(....) ?? new DateTime());
  ....
}
```