
Dealing with empty lists is an everyday situation in .NET. An empty list is often preferred to a null in order to control the logic. But how expensive is it to return an empty list?
The options
A List can currently - .NET 9 - be initialized in several ways
| Variant | Description |
|---|---|
new List() | Creates a list with the default capacity 0 |
new List(0) | Creates a list with the default capacity 0 |
new List(1) | Creates a list with the default capacity 4 |
new List(31) | Creates a list with the default capacity 31 |
[] | Creates a list with the default capacity 0 |
The notation [] is the latest and currently recommended notation. This is because this applies not only to List, but to all .NET collections.
In contrast to List, the most efficient option is not the constructor, but Array.Empty. [] for arrays is therefore an alias for Array.Empty.
Benchmark
The benchmark
shows very clearly why [] is the recommended spelling: it always guarantees the most efficient solution.
1BenchmarkDotNet v0.13.12, Windows 10 (10.0.19045.4651/22H2/2022Update)
2AMD Ryzen 9 5950X, 1 CPU, 32 logical and 16 physical cores
3.NET SDK 9.0.100-preview.5.24307.3
4 [Host] : .NET 9.0.0 (9.0.24.30607), X64 RyuJIT AVX2
5 .NET 9.0 : .NET 9.0.0 (9.0.24.30607), X64 RyuJIT AVX2
6
7| Method | Mean | Ratio | Gen0 | Allocated |
8|------------ |----------:|------:|-------:|----------:|
9| List() | 2.7975 ns | 1.00 | 0.0019 | 32 B |
10| List(0) | 2.9224 ns | 1.04 | 0.0019 | 32 B |
11| List [] | 2.7643 ns | 0.99 | 0.0019 | 32 B |
12| Array.Empty | 0.4912 ns | 0.18 | - | - |
13| Array [] | 0.4835 ns | 0.18 | - | - |
14| HashSet() | 4.0250 ns | 1.48 | 0.0038 | 64 B |
15| HashSet [] | 4.0798 ns | 1.46 | 0.0038 | 64 B |
The bechmark: https://github.com/BenjaminAbt/SustainableCode/tree/main/csharp/list-empty-return
Related articles

Jun 17, 2024 - 1 min read
.NET: use a preview version in your global.json
We are currently in the preview phase of .NET 9 , which releases in Nov 2024 - and if you want to test it extensively like I do, store the …

May 28, 2024 - 6 min read
Efficiently clean a string with .NET
Strings are one of the most commonly used types in .NET applications - and very often the source of inefficient code. For example, cleaning …

May 21, 2024 - 4 min read
Refit .NET - my personal caller best practise
Refit is an open-source library for .NET developers that simplifies the process of making HTTP API calls. It allows developers to define a …
Let's Work Together
Looking for an experienced Platform Architect or Engineer for your next project? Whether it's cloud migration, platform modernization or building new solutions from scratch - I'm here to help you succeed.
