Programmering

Hvordan jobbe med nullable typer i C #

C # -språket gir støtte for to typer data: verdityper og referansetyper. Mens en variabel av typen System. Streng er en referansetype, en variabel av typen Int32 er en verditype.

Å tilordne en nullverdi til en verditype var en utfordring lenge til begrepet nullable typer ble introdusert. Du kan ikke tilordne en nullverdi direkte til en verditype. Du kan ikke tilordne en nullverdi direkte til en verditype. Du kan bare tilordne en nullverdi til en verditype ved å dra nytte av nullbare typer - en funksjon som er lagt til i de nyere versjonene av .Net Framework.

Nullable typer har blitt introdusert i C # programmeringsspråk. Dette er forekomster av strukturen som heter System.Nullable. Ved bruk av en nullbar type, bortsett fra verdien innenfor det tillatte området for verditypen, kan du også ha en nullverdi. Derfor, hvis du har en nullbar boolsk variabel, inkluderer de mulige verdiene du kan tilordne den boolske variabelen sant, usant eller null. Denne funksjonen er nyttig, spesielt når du jobber med data som ligger i databasen, og du vil tilordne verdier til verdityper som kanskje eller ikke er null.

Merk at du bare kan ha verdityper som nullaktive - du kan ikke ha referansetyper som er nullbare. Referansetyper kan ikke være nullaktive typer fordi de har støtte for null - det vil si at du kan tilordne verdien null til hvilken som helst referansetype. En verditype kommer fra System.ValueType og inneholder dataene i sin egen minnetildeling. Med andre ord, variabler eller objekter eller verdityper har sin egen kopi av dataene.

Tvert imot strekker en referansetype seg System. Mål og peker på et sted i minnet som inneholder de faktiske dataene. Det skal bemerkes at alle unære og binære operatører som kan brukes på en verditype, også kan brukes på dens nullaktige motpart. Følgende kodebit illustrerer syntaksen for å definere en nullbar type i C #.

System.Nullable variable = null;

eller

T? variabel = null;

Her, T representerer datatypen til variabelen. Følgende uttalelse vil ikke kompileres, da du ikke kan tilordne en nullverdi til en verditype.

Int32 i = null;

For å tilordne en nullverdi til en verditype, må du dra nytte av en nullbar type som vist i kodebiten nedenfor.

Int32? jeg = null;

De Har verdi og Verdi eiendommer

Det er to offentlige skrivebeskyttede eiendommer, Har verdi og Verdi, i en forekomst av en nullbar type. Mens førstnevnte brukes til å kontrollere om den nullable variabelen inneholder en verdi, brukes den sistnevnte til å hente verdien inne i den nullable variabelen. Noter det Har verdi har en standardverdi på false. Følgende kodeliste illustrerer hvordan Har verdi og Verdi egenskaper kan brukes.

statisk tomrom Main (streng [] args)

        {

Int32? i = 100;

hvis (i.HasValue)

            {

Console.WriteLine ("Verdien til variabelen i er:" + i.Value);

            }

ellers

            {

Console.WriteLine ("Verdien til variabelen i er udefinert.");

            }

Console.ReadLine ();

        }

Merk at du også kan sjekke om verdien til en nullbar variabel er null som vist i kodebiten nedenfor.

Int32? i = 100;

hvis (i! = null)

Console.Writeline ("Verdien til variabelen i er ikke null");

Implisitte og eksplisitte konverteringer

Du kan kaste en nullbar type til en ikke-nullbar type, eksplisitt eller ved å bruke Verdi eiendom. Følgende kodebit illustrerer dette.

Int32? jeg = null;

Int32 j = (Int32) i;

Det bør bemerkes at hvis du setter en nullbar type til en ikke-nullbar type og den nullbare typen inneholder en nullverdi, vil du støte på InvalidOperationException.

Følgende kodebit illustrerer hvordan du kan gjøre en implisitt rollebesetning når du arbeider med en nullbar type.

Int32? jeg = null;

i = 100;

Null koalescerende operatør (??)

Null coalescing operator (representert som ??) brukes til å definere standardverdien som skal returneres når du tilordner en nullbar type til en ikke-nullbar type. Her er et kodeeksempel som illustrerer dette.

Int32? jeg = null;

Int32 j = i ?? 100;

Console.WriteLine ("Verdien av variabelen j er:" + j);

Verdien på variabelen Jeg er tildelt j hvis jeg ikke er null. Hvis verdien av variabelen Jeg er null, er en heltallverdi 100 tilordnet variabelen j. Slik fungerer null-koalesceringsoperatøren.

$config[zx-auto] not found$config[zx-overlay] not found