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

    JP/Politikens Hus

    Digital Workplace Supporter

    Københavnsområdet

    Politiets Efterretningstjeneste

    ML OPS til udvikling og støtte af Computer Network Exploitation

    Københavnsområdet

    Netcompany A/S

    Linux Operations Engineer

    Midtjylland

    Forsvarsministeriets Materiel- og Indkøbsstyrelse

    Cyberdivisionen søger Business Relationship Manager

    Københavnsområdet

    Annonceindlæg fra XFlow

    Digitalisering kræver mere end digitale blanketter

    Kommunerne har digitaliseret indgangen for borgerne. Men bag skærmen håndteres mange arbejdsgange stadig manuelt mellem systemer, mails og organisatoriske siloer.

    Navnenyt fra it-Danmark

    Netip A/S har pr. 1. april 2026 ansat Claus Berg som Account Manager ved netIP's kontor i Esbjerg. Han kommer fra en stilling som Client Manager hos itm8. Nyt job

    Claus Berg

    Netip A/S

    Steen Marquard,  Jabra, er pr. 15. juni 2026 udnævnt som Regional President for Norden og UK. Han er uddannet HD(O). Han beskæftiger sig med I sin nye rolle får Steen ansvar for at videreudvikle salget af virksomhedens professionelle lyd- og videoløsninger, samt styrke samarbejdet med channel teams og partnere på tværs af regionen. Udnævnelse
    Rethink Cybersecurity Advisory har pr. 1. juli 2026 ansat Michael Nyboe Engelrud som Associeret Partner & Senior Advisor. Han skal især beskæftige sig med spændingsfeltet mellem Informationssikkerhed og ansvarlig AI, Governance, Risk & Compliance og IT Beredskab. Han kommer fra en stilling som Principal Management Consultant hos Devoteam A/S. Han er uddannet AI Navigatør, certificeret i AI Transformation, Crisis Management med fundament i Computer Science. Han har tidligere beskæftiget sig med Ledelse, rådgivning, Databeskyttelse og Digital transformation. Nyt job

    Michael Nyboe Engelrud

    Rethink Cybersecurity Advisory

    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