C# onderscheidt types die kunnen zijn van types die dat niet kunnen. () stellen value types in staat om null vast te houden, (een compiler-feature) helpen null-bugs op te sporen, en (, , ) maken het werken met mogelijk-null waarden schoon en veilig — en bestrijden daarmee het alomtegenwoordige null-reference probleem.
