DevelopmentNieuwe features in C#11

Nieuwe features in C# 11

Nieuwe versies van C# komen en gaan. In 2021 werden C#10 en .NET 6 gereleased door Microsoft. Inmiddels is .NET alweer begonnen aan C#11 en .NET 7. In dit blog, bespreek ik de nieuwe features in C#11.

String optimalisaties

In de komende release zijn er een aantal optimalisaties die we kunnen verwachten met betrekking tot strings: newline feeds in geïnterpoleerde strings en raw string literals.

Newline feeds in geïnterpoleerde strings

Tot aan versie 10 van C# worden er twee types geïnterpoleerde strings ondersteund, namelijk verbatim- en non-verbatim string. De eerste kunnen we herkennen aan de @”” prefix. De tweede aan de $”” prefix.

Het verschil tussen beiden is dat het bij de eerste wel mogelijk is om nieuwe regels toe te voegen aan de verschillende tekst segmenten en bij de tweede niet. Een non-verbatim string met een format, zoals hieronder levert compile errors op:Non vabatim string

Figuur: Voorbeeld van non-verbatim string.

In het bovenstaande voorbeeld zou een newline moeten worden geëscaped middels karakters. Bijvoorbeeld /r/n.  In C# 11 is dit niet meer nodig.

Raw String Literals

Bij het samenstellen van een string kan het qua syntax nogal rommelig worden, doordat we verschillende karakters gebruiken, zoals backslashes en line breaks. Verder moeten andere karakters, zoals quotes weer worden geëscaped. C# biedt momenteel als oplossing hiervoor dat we @ gebruiken om zo details aan onze string toe te voegen om karakters te escapen.

Deze manier werkt prima voor bestandspaden en reguliere expressies, maar brengt ook het probleem met zich mee dat ze worden gescheiden middels quotes, welke we gebruiken in onze code en markup. Dit betekent dat je telkens eerst je teksten goed moet reviewen op fouten, wat tijd kost!

De raw string literal oplossing van Microsoft biedt een andere manier om je verbatim string samen te stellen. Door een nieuwe scheidingsteken te introduceren (drie quotes gevolgd door een nieuwe regel en weer drie quotes by default) kun je je regels code of markup er tussen voegen.New raw string literal

Figuur: Voorbeeld van nieuwe raw string literal

Je kunt echter zoveel quotes gebruiken als je zelf wil. Deze oplossing is niet bedoeld om het @ te vervangen, maar zijn ontworpen voor de speciale casus dat je code/markup moet passen en een manier nodig hebt om dit “veilig” te kunnen doen.

Parameter null-checking

Iedere ontwikkelaar heeft een check toegevoegd in zijn code of een argument NULL is. Dit ziet er ongeveer zo uit:

Null check

Figuur: Voorbeeld Null-Check C#

In de komende versie kunnen we dit verkorten middels de nieuwe bang-bang operator [!!].Dit ziet er als volgt uit:

Nieuwe manier null check

Figuur: Nieuwe manier van NULL-Check C# 11

Onder water wordt automatisch code gegenereerd om te controleren of er sprake is van een NULL reference exceptie. Dit gebeurt voordat enige code van de betreffende methode wordt uitgevoerd. Er zijn echter ook scenario’s waarin het niet mogelijk is om deze (nieuwe) operator te gebruiken. Bijvoorbeeld in een scenario waarin de methode gebruik maakt van abstracte parameters.

List Patterns

In de preview versie van C# 11 krijgen we mogelijk voor switch statements een syntax uitbreiding waarmee je arrays kunt testen, namelijk list patterns. Deze kun je herkennen aan de []. Binnen list patterns kunnen .. of _ operatoren worden gebruikt om slices te creëren. Hieronder kun je een voorbeeld zien:

List Patterns

Figuur: voorbeeld van list patterns in C# 11

De .. operator is de representatie van een serie elementen (willekeurig nummer), terwijl de _ een enkele element met een willekeurige waarde voorstelt.

List patterns kunnen worden ingezet voor alle types met een index en een Length/Count attribuut. Slices werken verder met ieder type die index heeft die een Range argument accepteert of gebruik maakt van de Slice methode met twee integers als parameter.

Hoe kun je zelf aan de slag met de nieuwe features?

Je kunt zelf aan de slag door Visual Studio 17.1 en .NET SDK 6.0.200 te downloaden. Wanneer je een project hebt aangemaakt, dien je in de .csproj file de LangVersion instellen op Preview.

csproi file

Figuur: Voorbeeld van .csproj file van https://devblogs.microsoft.com

Benieuwd wat er nog meer aankomt? Kijk dan eens op de voorstel pagina van Microsoft voor C#.

Gideon Kuijpers, Software Developer

  • Applicatie-modernisering-banner