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

The analyzer has detected an unsafe cast of a potentially null reference to a value type\. Even though no dereference as such takes place in this case, such a cast will still result in raising a 'NullReferenceException'\.

The simplest way to get this behavior is as follows:

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

This is what the fixed code should look like:

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

A warning will also be issued if a potentially null variable is found to be cast to any value type, say, struct:

```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;
}
```

The diagnostic checked the return result of the 'GetMetadata' method and found that it could return 'null'\. The type cast in this example needs a null check too:

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