C# 12 updates - Collection expressions
C# 12 finally introduces some new syntactical suger that I'm eager to use in production because it improves the readability of the code.
Part of the series
C# 12 updatesWhen reading through the what’s new in C# 12 post from Microsoft I was really happy when I saw ‘Collection expressions`. Because at work we use both C# and Kotlin, and initializing a list with a default set of values in Kotlin looks a lot cleaner to me than the current C# initialization does.
So I’m really eager to start playing with this and using it in production code-bases to improve the readability.
Implementation
Let’s create a new project to start playing around with the new collection expressions inside the csharp-12-features solution.
$ dotnet new console -n CollectionExpressions
$ dotnet sln add CollectionExpressions
If you remember the previous post about default lambda parameters, we created a list of names using the ‘old’ syntax like this.
var names = new List<String> { "John Doe", "Jane Doe" }; But if we change this code to the new collection expressions, we get this much cleaner line of code.
List<string> names = ["Jane Doe", "John Doe"]; The only downside for me is, that I can’t use the var keyword. But that is not that weird because the compiler needs to know which type of list is being created. But, I would like to see the compiler getting a bit smarter and guess the type from the assigned value. In our example a list of strings.
How does it work
Just like the previous initialization of a list, it desugars the code into the following example.
List<string> list = new List<string>(2);
list.Add("Jane Doe");
list.Add("John Doe");
List<string> list2 = list;
Use case
For me, I’ll be using this syntax everytime I need to initialize a list with default values. For example in test projects when I need to test a method that needs a list as an input. For now, I don’t have exact use cases for an actual production application which has a defined set of values, because the applications I work on mostly get their data from a database or another source.