C# | Nullable types

In C#, the compiler does not allow you to assign a null value to a variable. So, C# 2.0 provides a special feature to assign a null value to a variable that is known as the Nullable type. The Nullable type allows you to assign a null value to a variable. Nullable types can only work with Value Type not with Reference Type because it already contains a null value.
The Nullable type is an instance of System.Nullable<T> struct. Here T is a type which contains non-nullable value types like integer type, floating-point type, a boolean type, etc. For example, in nullable of integer type you can store values from -2147483648 to 2147483647, or null value.

Syntax:

Nullable<data_type> variable_name = null;

Or you can also use a shortcut which includes ? operator with the data type.



datatype? variable_name = null;

Example:

// this will give compile time error
int j = null;           

// Valid declaration
Nullable<int> j = null;   

// Valid declaration
int? j = null;           

How to access the value of Nullable type variables?

You cannot directly access the value of the Nullable type. You have to use GetValueOrDefault() method to get an orginal assigned value if it is not null. You will get the default value if it is null. The default value for null will be zero.

Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to illustrate Nullable Types
using System; 
  
class Geeks { 
  
    // Main Method
    static void Main(string[] args)
    {
          
        // defining Nullable type
        Nullable<int> n = null;
  
        // using the method
        // output will be 0 as default 
        // value of null is 0
        Console.WriteLine(n.GetValueOrDefault()); 
          
        // defining Nullable type
        int? n1 = null;
  
        // using the method
        // output will be 0 as default 
        // value of null is 0
        Console.WriteLine(n1.GetValueOrDefault()); 
          
           
        // using Nullable type syntax 
        // to define non-nullable
        int? n2 = 47;
  
        // using the method
        Console.WriteLine(n2.GetValueOrDefault()); 
          
        // using Nullable type syntax 
        // to define non-nullable
        Nullable<int> n3 = 457;
  
        // using the method
        Console.WriteLine(n3.GetValueOrDefault()); 
          
    }
      

chevron_right


Output:

0
0
47
457

Characteristics of Nullable types

  • With the help of nullable type you can assign a null value to a variable without creating nullable type based on the reference type.
  • In Nullable types, you can also assign values to nullable type. As shown in the below example.

    Example:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C# program to illustrate the
    // use of Nullable type
    using System;
      
    class GFG {
      
        // Main Method
        static public void Main()
        {
      
            // a is nullable type
            // and contains null value
            int ? a = null;
      
            // b is nullable type int
            // and behave as a normal int
            int ? b = 2345;
      
            // this will not print
            // anything on console
            Console.WriteLine(a);
              
            // gives 2345 as output
            Console.WriteLine(b);
        }
    }

    chevron_right

    
    

    Output:

    
    2345
    
  • You can use Nullable.HasValue and Nullable.Value to check the value. If the object assigned with a value, then it will return “True” and if the object is assigned to null, then it will return “False”. If the object is not assigned with any value then it will give compile time error.

    Example:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C# program to illustrate the
    // use of Nullable<L>.Hasvalue
    using System;
      
    class GFG {
      
        // Main Method
        static void Main()
        
              
            // a is nullable type
            // and contains null value
            Nullable<int> a = null;
      
            // check the value of object
            Console.WriteLine(a.HasValue);
              
            // b is nullable type
            // and contains a value
            Nullable<int> b = 7;
      
            // check the value of object
            Console.WriteLine(b.HasValue);
      
        }
    }

    chevron_right

    
    

    Output:

    False
    True
    
  • You can also use == and ! operators with nullable type.
  • You can also use GetValueOrDefault(T) method to get the assigned value or the provided default value, if the value of nullable type is null.
  • You can also use null-coalescing operator(??) to assign a value to the underlying type originate from the value of the nullable type.

    Example:

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C# program to illustrate the
    // use of  null-coalescing operator(??)
    using System;
      
    class GFG {
          
        // Main Method
        static public void Main()
        {
              
            // a is nullable type
            // and contains null value
            int ? a = null;
              
              
            // it means if a is null
            // then assign 3 to b
            int b = a ?? 3;
              
            // It will print 3
            Console.WriteLine(b);
        }
    }

    chevron_right

    
    

    Output:

    3
  • Nullable types do not support nested Nullable types.
  • Nullable types do not support var type. If you use Nullable with var, then the compiler will give you a compile time error.

Advantage of Nullable Types:

  • The main use of nullable type is in database applications. Suppose, in a table a column required null values, then you can use nullable type to enter null values.
  • Nullable type is also useful to represent undefined value.
  • You can also use Nullable type instead of reference type to store a null value.


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : eRaisedToX



Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.