Nullable types are instances of the Nullable<T> struct. A nullable type can represent the correct range of values for its underlying value type, plus an additional null value. For example, a Nullable<Int32>, pronounced "Nullable of Int32," can be assigned any value from -2147483648 to 2147483647, or it can be assigned the null value. A Nullable<bool> can be assigned the values true, false, or null. The ability to assign null to numeric and Boolean types is especially useful when you are dealing with databases and other data types that contain elements that may not be assigned a value. For example, a Boolean field in a database can store the values true or false, or it may be undefined.
using System;
class NullableExample
{
static void Main()
{
int? num = null;
// Is the HasValue property true?
if (num.HasValue)
{
Console.WriteLine("num = " + num.Value);
}
else
{
Console.WriteLine("num = Null");
}
// y is set to zero
int y = num.GetValueOrDefault();
// num.Value throws an InvalidOperationException if num.HasValue is false
try
{
y = num.Value;
}
catch (InvalidOperationException e)
{
Console.WriteLine(e.Message);
}
}
}
// The example displays the following output:
// num = Null
// Nullable object must have a value.
For more examples, see Using Nullable Types
Nullable Types Overview
Nullable types have the following characteristics:
Nullable types represent value-type variables that can be assigned the value of
null. You cannot create a nullable type based on a reference type. (Reference types already support thenullvalue.)The syntax
T?is shorthand for Nullable<T>, whereTis a value type. The two forms are interchangeable.Assign a value to a nullable type just as you would for an ordinary value type, for example
int? x = 10;ordouble? d = 4.108. A nullable type can also be assigned the valuenull:int? x = null.Use the Nullable<T>.GetValueOrDefault method to return either the assigned value, or the default value for the underlying type if the value is
null, for exampleint j = x.GetValueOrDefault();Use the HasValue and Value read-only properties to test for null and retrieve the value, as shown in the following example:
if(x.HasValue) j = x.Value;The
HasValueproperty returnstrueif the variable contains a value, orfalseif it isnull.The
Valueproperty returns a value if one is assigned. Otherwise, a InvalidOperationException is thrown.The default value for
HasValueisfalse. TheValueproperty has no default value.You can also use the
==and!=operators with a nullable type, as shown in the following example:if (x != null) y = x;
Use the
??operator to assign a default value that will be applied when a nullable type whose current value isnullis assigned to a non-nullable type, for exampleint? x = null; int y = x ?? -1;Nested nullable types are not allowed. The following line will not compile:
Nullable<Nullable<int>> n;
Related Sections
For more information:
C# Language Specification
For more information, see the C# Language Specification. The language specification is the definitive source for C# syntax and usage.
See Also
Nullable
C# Programming Guide
C#
C# Reference
What exactly does 'lifted' mean?




