Programiranje

Kako delati z ničelnimi vrstami v C #

Jezik C # nudi podporo za dve vrsti podatkov: vrste vrednosti in referenčne vrste. Medtem ko je spremenljivka tipa System.String je referenčni tip, spremenljivka tipa Int32 je vrednostni tip.

Dodelitev ničelne vrednosti za vrsto vrednosti je bila dolgo časa izziv, dokler ni bil uveden koncept ničelnih tipov. Ničelne vrednosti ne morete neposredno dodeliti vrsti vrednosti. Ničelne vrednosti ne morete neposredno dodeliti vrsti vrednosti. Ničelni vrednosti lahko dodelite vrsto vrednosti samo tako, da izkoristite ničelne tipe - funkcijo, dodano novejšim različicam .Net Framework.

V programskem jeziku C # so bile uvedene ničelne vrste. To so primeri imenovane strukture System.Nullable. Pri uporabi ničelne vrste lahko imate poleg vrednosti znotraj dovoljenega obsega za vrsto vrednosti tudi ničelno vrednost. Če imate torej logično spremenljivko, ki jo je mogoče razveljaviti, možne vrednosti, ki jih lahko dodelite logični spremenljivki, vključujejo true, false ali null. Ta funkcija je priročna, še posebej, če delate s podatki, ki se nahajajo v zbirki podatkov in želite tipom vrednosti dodeliti vrednosti, ki so lahko ali pa ne.

Upoštevajte, da lahko imate za vrednosti nične samo vrste vrednosti - ne morete imeti referenčnih vrst, ki jih je mogoče razveljaviti. Referenčni tipi ne morejo biti ničelni, ker imajo podporo za null - to pomeni, da lahko vrednost null dodelite kateremu koli referenčnemu tipu. Tip vrednosti izhaja iz System.ValueType in vsebuje podatke znotraj lastne dodelitve pomnilnika. Z drugimi besedami, spremenljivke ali predmeti ali tipi vrednosti imajo svojo kopijo podatkov.

Nasprotno, referenčni tip se razteza System.Object in kaže na mesto v pomnilniku, ki vsebuje dejanske podatke. Upoštevati je treba, da se lahko kateri koli unarni in binarni operatorji, ki jih je mogoče uporabiti za vrsto vrednosti, uporabijo tudi za njen ničelni koleg. Naslednji delček kode ponazarja sintakso za določitev ničelne vrste v C #.

Spremenljivka System.Nullable = null;

ali

T? spremenljivka = nič;

Tukaj, T predstavlja podatkovni tip spremenljivke. Naslednji stavek se ne bi prevedel, saj tipu vrednosti ne morete dodeliti ničelne vrednosti.

Int32 i = null;

Če želite vrsti vrednosti dodeliti ničelno vrednost, morate izkoristiti ničelno vrsto, kot je prikazano v spodnjem delčku kode.

Int32? i = nič;

The HasValue in Vrednost lastnosti

Obstajata dve javni lastnosti samo za branje, HasValue in Vrednost, v primerku razveljavljivega tipa. Medtem ko se prvi uporablja za preverjanje, ali ničelna spremenljivka vsebuje vrednost, se slednja uporablja za pridobivanje vrednosti, ki je v ničelni spremenljivki. Upoštevajte to HasValue ima privzeto vrednost false. Naslednji seznam kod ponazarja, kako HasValue in Vrednost lastnosti.

statična praznina Main (string [] args)

        {

Int32? i = 100;

če (i.HasValue)

            {

Console.WriteLine ("Vrednost spremenljivke i je:" + i.Value);

            }

drugače

            {

Console.WriteLine ("Vrednost spremenljivke i ni definirana.");

            }

Console.ReadLine ();

        }

Upoštevajte, da lahko tudi preverite, ali je vrednost spremenljivke, ki jo je mogoče razveljaviti, nična, kot je prikazano v spodnjem delčku kode.

Int32? i = 100;

če (i! = null)

Console.Writeline ("Vrednost spremenljivke i ni nič");

Implicitne in eksplicitne pretvorbe

Tip, ki ga je mogoče razveljaviti, lahko izrecno ali z uporabo datoteke Vrednost lastnine. Naslednji delček kode to ponazarja.

Int32? i = nič;

Int32 j = (Int32) i;

Upoštevati je treba, da če v primeru ničelnega tipa določite ničelni in če nični tip vsebuje ničelno vrednost, boste naleteli InvalidOperationException.

Naslednji delček kode prikazuje, kako lahko naredite implicitno igralsko zasedbo pri delu z ničelno vrsto.

Int32? i = nič;

i = 100;

Ničelni operater združevanja (??)

Ničelni operater združevanja (predstavljen kot ??) se uporablja za določanje privzete vrednosti, ki bi se vrnila, ko neveljavnemu tipu dodelite ničelno vrsto. Tu je primer kode, ki to ponazarja.

Int32? i = nič;

Int32 j = i ?? 100;

Console.WriteLine ("Vrednost spremenljivke j je:" + j);

Vrednost spremenljivke jaz je dodeljena j če i ni nič. Če je vrednost spremenljivke jaz je nič, je spremenljivki dodeljena celoštevilčna vrednost 100 j. Tako deluje ničelni operater združevanja.

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