CSharp examples for Language Basics:Nullable
T? translates into System.Nullable<T>, which is a lightweight immutable structure, having only two fields, to represent Value and HasValue.
The essence of System.Nullable<T> is very simple:
public struct Nullable<T> where T : struct { public T Value {get;} public bool HasValue {get;} public T GetValueOrDefault(); public T GetValueOrDefault (T defaultValue); ... }
The code:
int? i = null;
Console.WriteLine (i == null); // True
translates to:
Nullable<int> i = new Nullable<int>(); Console.WriteLine (! i.HasValue); // True
The default value of T? is null.