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.