The ? character that indicates a nullable type is really a shortcut to the System.Nullable<T> structure, where T is the type being made nullable. In other words, using int? is equivalent to using System.Nullable<System.Int32>.

You can make any value type nullable using the Nullable<T> syntax. You’d typically do this for your own custom struct or enum types.

For example, assume that you have the following two custom types.

// How I'm feeling
public enum Mood
{
Crabby,
Happy,
Petulant,
Elated
}
// A 3D point with a name
public struct Point3D
{
public float X, Y, Z;
public string Name;
}