== Why is this an issue?

Nullable value types can hold either a value or `null`. The value held in the nullable type can be accessed with the `Value` property or by casting it to the underlying type. Still, both operations throw an `InvalidOperationException` when the value is `null`. A nullable type should always be tested before the value is accessed to avoid the exception.


=== Noncompliant code example

[source,csharp]
----
public void Sample(bool condition)
{
    int? nullableValue = condition ? 42 : null;
    Console.WriteLine(nullableValue.Value); // Noncompliant

    int? nullableCast = condition ? 42 : null;
    Console.WriteLine((int)nullableCast);   // Noncompliant
}
----


=== Compliant solution

[source,csharp]
----
public void Sample(bool condition)
{
    int? nullableValue = condition ? 42 : null;
    if (nullableValue.HasValue)
    {
      Console.WriteLine(nullableValue.Value);
    }

    int? nullableCast = condition ? 42 : null;
    if (nullableCast is not null)
    {
      Console.WriteLine((int)nullableCast);
    }
}
----


include::../see.adoc[]


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

"xxx" is null on at least one execution path.


'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]
endif::env-github,rspecator-view[]
