Mark parameters as NOT nullable in C/.NET?
Interview Questions practice on Codemia
Over 8,000 real interview questions from top companies, searchable by company and role.
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 courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Interview Questions practice on Codemia
Over 8,000 real interview questions from top companies, searchable by company and role.