System.Nullable class
This article provides supplementary remarks to the reference documentation for this API.
The Nullable class supports value types that can be assigned null
.
A type is said to be nullable if it can be assigned a value or can be assigned null
, which means the type has no value whatsoever. By default, all reference types, such as String, are nullable, but all value types, such as Int32, are not.
In C# and Visual Basic, you mark a value type as nullable by using the ?
notation after the value type. For example, int?
in C# or Integer?
in Visual Basic declares an integer value type that can be assigned null
.
The Nullable class provides complementary support for the Nullable<T> structure. The Nullable class supports obtaining the underlying type of a nullable type, and comparison and equality operations on pairs of nullable types whose underlying value type does not support generic comparison and equality operations.
Boxing and unboxing
When a nullable type is boxed, the common language runtime automatically boxes the underlying value of the Nullable<T> object, not the Nullable<T> object itself. That is, if the HasValue property is true
, the contents of the Value property is boxed.
If the HasValue
property of a nullable type is false
, the result of the boxing operation is null
. When the underlying value of a nullable type is unboxed, the common language runtime creates a new Nullable<T> structure initialized to the underlying value.