Nullable Types
Learn nullable value types, nullable reference types, and how C# helps you avoid null reference exceptions.
On this page 6 sections
The Problem with Null
A NullReferenceException — trying to use an object that doesn't actually exist — is one of the most common runtime errors in any C-family language. Modern C# gives you compiler help to catch these mistakes before they happen.
Nullable Value Types
Value types like int can't normally be null — appending ? makes them nullable.
int? age = null;
if (age.HasValue){ Console.WriteLine(age.Value);}else{ Console.WriteLine("Age not provided.");}Click Run to see what this code prints.
Nullable Reference Types
Since C# 8, when nullable reference types are enabled (the default in new projects), string means "never null," while string? explicitly allows null. The compiler warns you if you use a nullable value without checking it first.
string? middleName = null; // explicitly nullablestring firstName = "Amit"; // compiler expects this to never be nullNull-Conditional Operator
?. safely accesses a member only if the object isn't null, short-circuiting to null instead of throwing.
string? name = null;int? length = name?.Length; // null, doesn't throw
Console.WriteLine(length ?? -1);Click Run to see what this code prints.
FAQs
It only produces warnings, not compile errors, so existing code keeps working — but new projects are strongly encouraged to fix the warnings as they go.
Summary
int?makes a value type nullable.- Nullable reference types make "can this be null?" part of the type system.
?.and??provide safe, concise ways to work with potentially-null values.