Dit jaar in november komt de nieuwe versie van .NET 9 uit waarin C#13 ondersteund wordt. Deze versie is geen long-term-support versie, er zullen dus teams zijn die wachten tot .NET 10 om hun software te upgraden. Ik vind het zelf prettig om elk jaar een update te doen. Dat houdt de stappen allemaal net wat kleiner. Mooie bonus is dat je de nieuwe features van C# kunt gebruiken. Deze versie heeft geen spannende wijzigingen voor zover ik kan inschatten overigens.

Params modifier

Ik kom het weinig tegen in code in het wild, maar het is mogelijk om een parameter van een functie een params keyword mee te geven. Hiermee geef je aan dat je een ongelimiteerd aantal van dat type mag meegeven. In het verleden moest dit altijd een array zijn. Nu zijn alle types toegestaan die een collection implementeren.

C#13 voorbeeld 1

Zie ook https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/params-collections

Nieuw Lock object

Hoewel je waarschijnlijk elke vorm van locking wilt voorkomen in je software, ontkom je er in sommige scenario’s niet aan. Het nieuwe Lock object biedt betere ondersteuning om in een multi-threaded omgeving er iets minder bende van te maken.

C#13 voorbeeld 2

Zie ook https://learn.microsoft.com/en-us/dotnet/api/system.threading.lock?view=net-9.0

Nieuwe escape sequence

Er zijn diverse speciale sequences die je in een string kunt gebruiken. Denk aan \r en \n voor return en newline. Voor een escape karakter was dit tot voor kort \u001b or \x1b wat nogal ellende gaf wanneer je tekst na de escape geldige hexadecimale tekens bevatte. Nu is de sequence voor het escape karakter \e waardoor deze gemakkelijker in het gebruik is.

Zie ook https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/lexical-structure

 Method group natural type improvements

Eerlijk gezegd heb ik mijn hoofd gebroken over deze verbetering onder de moterkap bij het overloaden van methodes. Het maakt de gecompileerde code wat efficiënter, maar ik kon er met de beste wil van de wereld geen voorbeeld bij bedenken. Misschien dat iemand van jullie inspiratie heeft voor in het commentaar.

Zie ook https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/method-group-natural-type-improvements

Implicit indexer access in object initializers

Een impliciete “vanaf het einde” operator was niet toegestaan in de object initialisatie (niet dat het ooit in me opgekomen is om dat te doen). Het kan nu wel:

c#13 voordbeeld 3

In dit voorbeeld in C#13 zou je aftellen van 9 naar 0. Ik vraag me af of je code er leesbaarder van wordt overigens.

Zie ook https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-13