Required Parameters in C# 13: A Cleaner Way to Write Methods


C# 13, currently in preview with .NET 10, introduces a long-awaited feature: required method parameters. While the required
keyword has been available for properties since C# 11. This new enhancement lets developers enforce method arguments more declaratively, improving readability and reducing boilerplate validation code.
In this post, we'll explain required parameters, how they differ from optional and nullable ones, and how to start using them immediately.
The Problem with Traditional Method Parameters
Traditionally, when a method expects non-null input, you’re forced to write boilerplate like this:
public void SendEmail(string? recipient)
{
if (string.IsNullOrWhiteSpace(recipient))
throw new ArgumentException("Recipient is required", nameof(recipient));
// logic here
}
Even with nullable annotations, the compiler won't enforce non-null at compile time unless you're using nullable reference types strictly.
The New required
Parameters
C# 13 now lets you mark parameters as required
, just like you do with properties. The compiler ensures they’re supplied at the call site.
public void SendEmail(required string recipient)
{
// No need for null checks unless you're doing deeper validation
Console.WriteLine($"Sending to {recipient}");
}
If the caller omits the parameter or passes null
, the compiler throws an error — before runtime.
Syntax
void MyMethod(required string name, int age)
Only applies to reference types (currently).
Cannot be combined with
params
oroptional
parameters.Works well with overloading and pattern-matching.
Real-World Use Case
Suppose you're building an API layer:
public IActionResult RegisterUser(required string username, required string email)
{
// No need to write null/empty validation unless you're doing regex/email format checks
_logger.LogInformation($"User: {username}, Email: {email}");
return Ok();
}
The controller is cleaner, and contract enforcement is built into the compiler.
Gotchas and Edge Cases
Required is not yet compatible with value types (though they must be passed anyway).
Default values are not allowed on required parameters.
Refactoring existing methods to include
required
might break existing call sites.This is a preview feature, so you’ll need the latest .NET 10 SDK and enable preview features in your
.csproj
:
<LangVersion>preview</LangVersion>
Summary
Required parameters in C# 13 are a simple but powerful addition that promotes cleaner, more self-documenting code. By shifting enforcement to compile time, they reduce runtime bugs and eliminate redundant checks.
If you're already using required
for object properties, this method-level enhancement will feel like a natural progression.
References
Subscribe to my newsletter
Read articles from Renato Ramos Nascimento directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Renato Ramos Nascimento
Renato Ramos Nascimento
With over 14 years in software development, I specialize in backend systems using .NET, Python, and Java. I bring full lifecycle expertise, including requirements analysis, client/server and data layer development, automated testing (unit, integration, end-to-end), and CI/CD implementations using Docker, GitLab Pipelines, GitHub Actions, Terraform, and AWS CodeStar.