Skip to main content

Quick one: Difference between collection expressions and collection initializer

8/25/2025
1 minute read

Did you ever wonder if there is a noticeable difference between:

csharp
List<int> a = [1, 2, 3];
// And
List<int> b = new() {1,2,3};

Let's find out:

Lowered version#

We can make the answer pretty obvious, so we just lower the code:

csharp
int num = 3;
List<int> list = new List<int>(num);
CollectionsMarshal.SetCount(list, num);
Span<int> span = CollectionsMarshal.AsSpan(list);
int num2 = 0;
span[num2] = 1;
num2++;
span[num2] = 2;
num2++;
span[num2] = 3;
num2++;
List<int> list2 = new List<int>();
list2.Add(1);
list2.Add(2);
list2.Add(3);

Where list is our a and list2 is b. So collections expressions ([1,2,3]) are "smarter" and faster in the sense that they preallocate the list with the exact number of elements we want to add. The collection initializer doesn't do that for one simple reason: The compiler by its spec is required to call the Add method for each element in the initializer. Is the performance benefit worth it? Well that is up to you - it is measurable for sure!

An error has occurred. This application may no longer respond until reloaded.Reload x