Mark parameters as NOT nullable in C/.NET?
Data Structures & Algorithms practice on Codemia
Step through 300+ coding interview problems with animated visualisers that show the data structure changing as the code runs. The Blind 75 are free.
Introduction
In C# and .NET, handling `null` values effectively is crucial for creating reliable and bug-free applications. Null values can cause runtime errors, leading to system crashes if not properly managed. The ability to mark parameters as non-nullable is a feature designed to improve code safety, readability, and maintainability. This article delves into marking parameters as NOT nullable in C#/.NET, exploring technical explanations, examples, and best practices.
Understanding Nullable and Non-Nullable Types
To understand non-nullable parameters, it's vital to grasp the distinction between nullable and non-nullable types.
- Nullable Types: Variables that can hold a defined value or a null value, allowing the variable not to reference any object. Syntax: `Nullable``<int>``` or `int?`.
- Non-Nullable Types: Variables that can only hold a defined value and cannot be null. These are default for value types, such as `int`, `double`, explicit structs, and more.
Non-Nullable Reference Types
Starting with C# 8.0, you can declare reference types as non-nullable, a significant enhancement for ensuring null safety. This feature allows you to enforce non-null constraints at compile-time:
Enabling Non-Nullable Reference Types
To enable non-nullable reference types, add the following directive to your `.csproj` file:
- `orderId` is a non-nullable value type (always non-null).
- `customerName` is a non-nullable reference type. Attempting to call `ProcessOrder` with a `null` for `customerName` results in a compile-time warning.
- Error Prevention: Compile-time checks help avoid null reference exceptions at runtime.
- Enhanced Code Clarity: By defining intent clearly, code becomes more readable and less error-prone.
- Improved Maintenance: Changes and refactoring are easier as the contract of the methods regarding nullability is explicit.
Related reading
- Max number of concurrent HttpWebRequests
- Maximum number of threads in a .NET app?
- Maximum number of threads in a .NET app?
- MEF with MVC 4 or 5 - Pluggable Architecture 2014
- Memory address of an object in C
- MemoryCache Thread Safety, Is Locking Necessary?
- MemoryStream - Cannot access a closed Stream
- MemoryStream.Close or MemoryStream.Dispose

OOD Fundamentals
Master object-oriented design from first principles, SOLID, design patterns, and classic interview problems with hands-on coding.
View the courseData Structures & Algorithms practice on Codemia
Step through 300+ coding interview problems with animated visualisers that show the data structure changing as the code runs. The Blind 75 are free.