C# distingue i tipi che possono essere da quelli che non possono. () permettono ai tipi di valore di contenere null, (una funzionalità del compilatore) aiutano a individuare i bug legati a null, e (, , ) rendono il lavoro con i valori potenzialmente null pulito e sicuro — affrontando il pervasivo problema dei riferimenti null.
