Why is this an issue?

Nullable value types can hold either a value or Nothing.

The value stored 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 Nothing. A nullable type should always be tested before accessing the value to avoid raising exceptions.

How to fix it

Code examples

Noncompliant code example

Sub Sample(condition As Boolean)
    Dim nullableValue As Integer? = If(condition, 42, Nothing)
    Console.WriteLine(nullableValue.Value)             ' Noncompliant: InvalidOperationException is raised

    Dim nullableCast As Integer? = If(condition, 42, Nothing)
    Console.WriteLine(CType(nullableCast, Integer))    ' Noncompliant: InvalidOperationException is raised
End Sub

Compliant solution

Sub Sample(condition As Boolean)
    Dim nullableValue As Integer? = If(condition, 42, Nothing)
    If nullableValue.HasValue Then
        Console.WriteLine(nullableValue.Value)
    End If

    Dim nullableCast As Integer? = If(condition, 42, Nothing)
    If nullableCast.HasValue Then
        Console.WriteLine(CType(nullableCast, Integer))
    End If
End Sub

Resources

Documentation