C# rozróżnia typy, które mogą być , od tych, które nie mogą. () pozwalają typom wartości przechowywać wartość null, (funkcja kompilatora) pomagają wychwycić błędy związane z null, a (, , ) czyniąc pracę z potencjalnie null wartościami czystą i bezpieczną — rozwiązując wszechobecny problem null-referencji.
