Are nullable types reference types?
C#.NetTypesNullableC# Problem Overview
When I declare an int
as nullable
int? i=null;
Does i
here become a reference type?
C# Solutions
Solution 1 - C#
No, a nullable is a struct. What is happening is that the nullable struct has two values:
- The value of the data type (
int
forint?
,DateTime
forDateTime?
, etc.). - A boolean value which tells if the data type value has been set. (
HasValue
is the property.)
When you set the value of the data type, the struct changes HasValue
to true.
Solution 2 - C#
From Nullable Types (C# Programming Guide):
> Nullable types are instances of the System.Nullable struct.
and
> 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 the null value.)
So, no they're not reference types.
Solution 3 - C#
Nullable types are neither value types nor reference types. They are more like value types, but have a few properties of reference types.
Naturally, nullable types may be set to null
. Furthermore, a nullable type cannot satisfy a generic struct
constraint. Also, when you box a nullable type with HasValue
equal to false
, you get a null
pointer instead of a boxed nullable type (a similar situation exists with unboxing).
These properties make nullable types non-value types, but they sure aren't reference types either. They are their own special nullable-value type.
Solution 4 - C#
No, the Nullable type is in fact a struct. The runtime will intelligently handle the setting of a null value for you, giving the appearance of a reference type, when it's not....
Solution 5 - C#
Nullable types cannot be reference types.
Solution 6 - C#
You shouldn't need to make a reference type a nullable type as you can pass null in its place.