
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

Dec 05, 2025 · 5 min read
IMemoryCache Entry Invalidation (Manual Cache Busting)
IMemoryCache is great for speeding up expensive operations (database reads, HTTP calls, heavy computations). But many real systems need more …

Nov 08, 2025 · 8 min read
.NET 10 Release: What's New (LTS) and What to Upgrade First
.NET 10 is the next Long-Term Support (LTS) release in the .NET family. LTS matters because it’s the version many teams standardize on …

Sep 24, 2025 · 9 min read
Automatically discover tools for Azure OpenAI Realtime API
Azure now provides a unified Realtime API for low‑latency, multimodal conversations over WebRTC or WebSockets. If you’ve used the earlier …
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.

Comments