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:
void Foo()
{
object b = null;
var c = (bool)b;
}
This is what the fixed code should look like:
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:
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:
protected override void ProcessMessageAfterSend(....)
{
....
(DateTime)(msg.GetMetadata(....) ?? new DateTime());
....
}
This diagnostic is classified as:
You can look at examples of errors detected by the V3148 diagnostic. |