Oppdag hvordan kommende endringer vil forbedre koden din og gjøre livet ditt som utvikler litt enklere.

Detaljer om den etterlengtede C# 12 Preview har lekket, og gir en sniktitt på kommende funksjoner som burde revolusjonere språket. Disse funksjonene gir gode løfter for å forbedre kodelesbarheten, optimalisere ytelsen og låse opp avanserte funksjoner i språket.

Forbedrede bryteruttrykk

C# 8 introdusert grunnleggende bytteuttrykk som lar deg uttrykke kompleks betinget logikk konsist, i en lesbar form. C# 12 tar dette videre ved å introdusere en ny mønstertilpasningssyntaks for bytteuttrykk, noe som gjør det enda enklere å skrive ekspressiv og konsis kode.

Tenk på følgende kodebit.

var resultat = obj bytte om
{
int Jeg når jeg > 0 => "positiv",
int Jeg når jeg < 0 => "Negativ",
_ => "Null"
};

Denne koden bruker bryteruttrykk for å bestemme om et heltall er positivt, negativ, eller null. I C# 12 kan du forenkle denne koden ytterligere ved å bruke den nye mønstertilpasningssyntaksen:

var resultat = obj bytte om
{
> 0 => "positiv",
< 0 => "Negativ",
_ => "Null"
};
instagram viewer

Denne syntaksen lar deg utelate når nøkkelord og bruk relasjonsoperatorer direkte i bryteruttrykket.

Primære konstruktører for klasser og konstruksjoner

Du kan nå lage primære konstruktører i hvilken som helst klasse eller struct (et alternativ i lettvektsklassen). Ved å bruke primære konstruktører kan du legge til parametere i klassedeklarasjonen og bruke disse verdiene inne i klassekroppen.

C# 9 introduserte primære konstruktører som en del av den posisjonelle syntaksen for poster. C# 12 utvider disse til alle strukturer og klasser.

Du kan sette parameterne etter typenavnet i parentes som vist nedenfor:

offentlig klasse Student(int id, streng navn, IEnumerable<desimal> karakterer)
{
offentligStudent(int id, streng Navn): dette(id, navn, Enumerable. Tomt<desimal>()) { }
offentligint Id => id;
offentligstreng Navn { ; sett; } = navn. Listverk();
offentligdesimal GPA => karakterer. Noen()? karakterer. Gjennomsnitt(): 4.0m;
}

Parametrene til en primær konstruktør er i omfang gjennom hele den deklarerende typens kropp. Du kan sette opp egenskaper eller felt eller kan også bruke dem i metoder eller lokale funksjoner som variabler. Du kan også gi disse parameterne til en basiskonstruktør.

Interpolerte strenger forbedringer

Interpolerte strenger har eksistert siden C# 6. I C# 12 kan du nå lage dynamiske verdier for strenger ved å bruke kompliserte uttrykk.

int jeg = 5;
streng utgang = $"Verdien av i er {Jeg}, og kvadratet er {i*i}.";
Konsoll. WriteLine (utgang);

Denne koden skriver ut "Verdien av i er 5, og kvadratet er 25".

Bruk av direktiver for tilleggstyper

Med C# 12 kan du bruke bruksalias-direktivet til å kalle alle typer, ikke bare navngitte typer. Du kan lage semantiske aliaser for tupler, arrays, pekere eller andre usikre typer.

Her er noen eksempler:

ved hjelp av Mål = (streng Enheter, int Avstand);
ved hjelp av UnitsInt = int?;
Eksempel på bruk av aliaser:
offentligtomromBeregning(Måling måling)
{
// Metode Body
}

Lambda-uttrykksforbedringer

C# 12 gir lambda-uttrykk ved å la deg definere standardverdiene for parametere. Syntaksen er identisk med den for andre standardparametere:

For eksempel, (int incrementTo = 5) => incrementTo + 1 angir en standardverdi på 5 for incrementTo-parameteren, som lambda-kallet vil bruke hvis du ikke gir den en verdi.

var incrementWithDefault = (int inkrementTil = 5) => økerTil + 1;
incrementWithDefault(); // 6
incrementWithDefault(9); // 10

Utenom det kom mange andre forbedringer til lambda-uttrykk for å gjøre dem mer effektive.

For eksempel:

  • Du kan nå lage mer komplekse uttrykk innenfor lambda-funksjoner.
  • Du kan nå transformere lambda-uttrykk til uttrykkstrær som forenkler komplekse spørringer og optimerer ytelsen.

Asynkrone strømmer

Du kan iterere gjennom asynkrone datakilder med den nye asynkrone strømmer funksjonen til C# 12. Denne nye iteratoren—avvente foreach— hjelper deg å iterere over et sett med asynkrone data:

avventefor hver (var punkt iGetItemsAsync())
{
Konsoll. WriteLine (element.verdi);
}

C# 12: Revolusjonerende kode med spennende nye funksjoner

I påvente av C# 12 kan du forvente en oppdatering som forandrer spillet med spennende nye funksjoner. Disse fremskrittene, som forbedrede bryteruttrykk, primære konstruktører og forbedringer av lambda-uttrykk, indikerer et sterkt fokus på kodeens enkelhet, fleksibilitet og ytelse.

C# 12 er klar til å gi et betydelig sprang fremover, slik at du kan skrive mer uttrykksfull, effektiv og kraftig kode.