Skriv koden hurtigere med ny C#

Hvis du udvikler ved hjælp af C#, har du meget at glæde dig over i den nye version 9. Den er ingen revolution, men du kan i nogle tilfælde programmere hurtigere.

Artikel top billede

(Foto: Computerworld)

Af Michell Cronberg, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

Microsoft frigav i november 2020 den nye .NET 5 – se omtalen i AOD nr. 1 – som især var fokuseret på at gøre .NET klar til en sammenlægning af samtlige runtimes til den kommende .NET 6. Men der var også en ny version af det populære C#-programmeringssprog.

Ser man tilbage på frigivelsen af den foregående opdatering af C#, var der ikke de helt store, revolutionerende nyheder. I C# 8 blev vi blandt andet introduceret for nullable reference types, men sproget er ret tæt på at være komplet, og nye tilføjelser handler meget om mikrooptimering og syntakssukker.

Nu er vi så nået til C# 9. Heller ikke her bliver verden sat på den anden ende efter lanceringen, men der er alligevel flere opsigtsvækkende features til C#-udviklernes værktøjskasse. Det bliver hurtigere at skrive kode.

Nyt i immutable data

De største nyheder finder vi indenfor immutable data (en lidt tynd dansk oversættelse er vel ”uforanderlige data”), hvilket i bund og grund handler om, at når først data er placeret i hukommelsen, kan de ikke tilrettes igen. Det skaber både sikkerhed og mulighed for optimering og er en stor bestanddel af andre (især funktionsorienterede) sprog.

I C# har man altid kunne skabe immutable typer ved at gemme data væk i private felter, som kun kan aflæses gennem offentlige egenskaber, og som udelukkende kan tildeles en værdi gennem en constructor. Men for at kunne initialisere objekter uden en constructor skulle man kunne tildele felter en værdi gennem en offentlig egenskab eller metode, og så er objektet ikke længere immutabelt. Det er rettet i C# 9, hvor en egenskab nu kan defineres med init-kodeordet. Se figur 1, hvor en anden ny feature også kan ses. Det er nu muligt at benytte new-kodeordet uden typenavn.

Når man tidligere skabte sine egne immutable typer har det også været normal praksis at overskrive metoderne Equals og GetHashCode fra System.Object samt operatorerne == og !=. På den måde kan objekterne sammenlignes på værdier og ikke på referencer – ligesom objekter af System.String, som jo er baseret på en klasse, men sammenlignes på værdi.

Hvis man ønsker at skabe den form for immutable typer, er der virkelig hjælp at hente i den nye C# 9, fordi den nye record-type gør definering og brug meget simpel. I figur 2 kan du se defineringen af en terning med to immutable-egenskaber. Defineringen fylder en linjes kode, hvilket skal sammenlignes med mindst 15-20 linjer i C# 8. Bemærk i øvrigt, at det er nemt at kopiere værdier fra et objekt til et andet ved hjælp af with-kodeordet. Det er også en ny C# 9-feature.

Den nye record-type kan også indeholde egne medlemmer og indgå i et arvehierarki med andre record-typer, men den immutable funktionalitet bliver autogeneret helt automatisk.

I både forrige og i denne version af C# er der tilføjet en del muligheder relateret til mønstergenkendelse (pattern matching), og det er endnu et tegn på, at sproget bliver forfinet med muligheder, som findes i andre sprog. I C# 9 er der tilføjet forskellige logiske operatorer, og det vil uden tvivl blive brugt en del i fremtiden. Det giver blandt andet mulighed for at skrive kode med en syntaks, som er mere menneskelig.

Eksempelvis vil det være oplagt for mennesker at sige, at ”hvis x er større end 10 og mindre end 20, så ...”, men i C#-syntaks har man skullet skrive ”hvis x er større end 10, og hvis x er mindre end 20”. Det giver samme resultat, men førstnævnte er naturligvis nemmest og mere logisk at skrive i kode, og det er nu muligt, som det fremgår af figur 3.

Analyse af koden

En af de mere avancerede features i C# 9 er muligheden for at skrive kode, som medtages på et meget tidligt tidspunkt i kompileringsprocessen. På den måde kan man analysere koden og tilføje yderligere filer bestående af nye typer eller metoder til eksisterende (partial) metoder. Det kaldes source generators og kan blandt andet benyttes til konvertering af eksterne filer til typer eller automatisk optimering.

Det smarte er, at det sker som en integreret del af kompileringsprocessen, så den nye genererede kode er tilgængelig i Visual Studio omgående, fordi der baggrundskompileres konstant. Overordnet minder det lidt om de gamle T4-templates i Visual Studio med den store forskel, at source generators afvikles på et meget tidligere tidspunkt og giver mange flere muligheder.

Men C# står aldrig stille. Den 10. version af C# forventes at komme sammen med .NET 6 til november. 

3 nyheder i den opdaterede C#


Figur 1: Der er flere gode nyheder. Her ser du anvendelsen af det nye init-kodeord. Desuden viser billedet af en kodestump i C# 9 en ny og nemmere måde at oprette objekter på.


Figur 2: Den nye record-type autogenererer en immutabel klasse med fokus på værdier og ikke referencer. Og bemærk den nye brug af with.


Figur 3: Der er en del nye muligheder relateret til pattern matching med i C# 9. Her et par af de simple, men meget effektive nye mønstre.

Læses lige nu

    Aller Leisure A/S

    Erfaren softwareudvikler til rejsebranchen

    Københavnsområdet

    Red Barnet

    Software developer til Red Barnets IT-team

    Københavnsområdet

    KMD A/S

    Senior Service Delivery Manager

    Københavnsområdet

    Netcompany A/S

    Cloud Operations Manager (Azure)

    Københavnsområdet

    Navnenyt fra it-Danmark

    Lauren De Ventura,  emagine Expertise A/S, er pr. 1. juli 2026 udnævnt som Chief People Officer, fast del af den globale ledelse og bestyrelsesmedlem. Hun er uddannet HR-ledelse på tværs af konsulent-, staffing- og IT-branchen. Hun beskæftiger sig med skabe rammerne for emagine som et sted, hvor IT-talenter kan opbygge meningsfulde karrierer. Udnævnelse

    Lauren De Ventura

    emagine Expertise A/S

    Pinksky ApS har pr. 1. maj 2026 ansat Dan Toft, 29 år,  som Rådgivende konsulent, Partner. Han skal især beskæftige sig med digitalisering med Microsoftplatformen. Han kommer fra en stilling som Microsoft 365 & SharePoint Specialist hos Evobis ApS. Han er uddannet datamatiker. Han har tidligere beskæftiget sig med Microsoft 365 og SharePoint udvikling. Nyt job

    Dan Toft

    Pinksky ApS

    Netip A/S har pr. 1. maj 2026 ansat Steffen Bendix Søjberg som Systemkonsulent ved netIP's kontor i Rødekro. Han kommer fra en stilling som Systemadministr,og har været i branchen i mange år. Nyt job
    SAP SuccessFactors Partner Pentos har pr. 1. marts 2026 ansat Plamena Cherneva som Seniorkonsulent indenfor SuccessFactors HCM. Hun skal især beskæftige sig med konfiguration og opsætning af SuccessFactors suiten, samt udvikle smarte løsninger til mellemstore danske virksomheder. Hun kommer fra en stilling som løsningsarkitekt indenfor HR IT hos LEO Pharma. Hun har tidligere beskæftiget sig med HR procesdesign, stamdata og onboarding. Nyt job

    Plamena Cherneva

    SAP SuccessFactors Partner Pentos