Nullable<T>.HasValue Property 
Definition
Important
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Gets a value indicating whether the current Nullable<T> object has a valid value of its underlying type.
public:
 property bool HasValue { bool get(); };public bool HasValue { get; }member this.HasValue : boolPublic ReadOnly Property HasValue As BooleanProperty Value
true if the current Nullable<T> object has a value; false if the current Nullable<T> object has no value.
Examples
The following example uses the HasValue property of a Nullable<int> (Nullable(Of Integer) in Visual Basic) object to determine whether it should display the object's Value property or its GetValueOrDefault property.
using System;
public class Example
{
   public static void Main()
   {
      Nullable<int> n1 = new Nullable<int>(10);
      Nullable<int> n2 = null;
      Nullable<int> n3 = new Nullable<int>(20);
      n3 = null;
      Nullable<int>[] items = { n1, n2, n3 };
      foreach (var item in items) {
         Console.WriteLine("Has a value: {0}", item.HasValue);
         if (item.HasValue) {
            Console.WriteLine("Type: {0}", item.GetType().Name);
            Console.WriteLine("Value: {0}", item.Value);
         }
         else {
            Console.WriteLine("Null: {0}", item == null);
            Console.WriteLine("Default Value: {0}", item.GetValueOrDefault());
         }
         Console.WriteLine();
      }
   }
}
// The example displays the following output:
//       Has a value: True
//       Type: Int32
//       Value: 10
//
//       Has a value: False
//       Null: True
//       Default Value: 0
//
//       Has a value: False
//       Null: True
//       Default Value: 0
open System
let n1 = Nullable 10
let n2 = Nullable()
let mutable n3 = Nullable 20
n3 <- Nullable()
let items = [| n1; n2; n3 |]
for item in items do
    printfn $"Has a value: {item.HasValue}"
    if item.HasValue then
        printfn $"Type: {item.GetType().Name}"
        printfn $"Value: {item.Value}"
    else
        printfn $"Null: {item = Nullable()}"
        printfn $"Default Value: {item.GetValueOrDefault()}"
    printfn ""
// The example displays the following output:
//       Has a value: True
//       Type: Int32
//       Value: 10
//
//       Has a value: False
//       Null: True
//       Default Value: 0
//
//       Has a value: False
//       Null: True
//       Default Value: 0
Module Example
   Public Sub Main()
      Dim n1 As New Nullable(Of Integer)(10)
      Dim n2 As Nullable(Of Integer)
      Dim n3 As New Nullable(Of Integer)(20)
      n3 = Nothing
      Dim items() As Nullable(Of Integer) = { n1, n2, n3 }
      For Each item In items
         Console.WriteLine("Has a value: {0}", item.HasValue)
         If item.HasValue Then
            Console.WriteLine("Type: {0}", item.GetType().Name)
            Console.WriteLine("Value: {0}", item.Value)
         Else
            Console.WriteLine("Null: {0}", item Is Nothing)
            Console.WriteLine("Default Value: {0}", item.GetValueOrDefault())
         End If
         Console.WriteLine()
      Next                  
   End Sub
End Module
' The example displays the following output:
'       Has a value: True
'       Type: Int32
'       Value: 10
'       
'       Has a value: False
'       Null: True
'       Default Value: 0
'       
'       Has a value: False
'       Null: True
'       Default Value: 0
Remarks
If the HasValue property is true, the value of the current Nullable<T> object can be accessed with the Value property. Otherwise, attempting to access its value throws an InvalidOperationException exception.