Kako raditi s tipovima koji se mogu poništiti u C #

Jezik C # pruža podršku za dvije vrste podataka: vrste vrijednosti i referentne vrste. Iako je varijabla tipa System.Stringreferentni tip, varijabla tipa Int32je vrijednosni tip.

Dodjela null vrijednosti vrijednosnom tipu dugo je bio izazov dok se nije uveo koncept nullable tipova. Ne možete dodijeliti null vrijednost izravno vrsti vrijednosti. Ne možete dodijeliti null vrijednost izravno vrsti vrijednosti. Nulskoj vrijednosti možete dodijeliti vrstu vrijednosti samo iskorištavanjem poništenih tipova - značajke dodane novijim verzijama .Net Framework-a.

Nullable tipovi su uvedeni u programski jezik C #. Ovo su primjerci imenovane strukture System.Nullable. U korištenju nullable tipa, osim vrijednosti unutar dopuštenog raspona za vrstu vrijednosti, možete imati i null vrijednost. Dakle, ako imate logičku varijablu koja se može poništiti, moguće vrijednosti koje možete dodijeliti logičkoj varijabli uključuju true, false ili null. Ova značajka dobro dođe, posebno kada radite s podacima koji se nalaze u bazi podataka i želite dodijeliti vrijednosti vrstama vrijednosti koje mogu ili ne moraju biti nule.

Imajte na umu da vrste vrijednosti mogu imati samo nulluble - ne možete imati referentne tipove koji su nullable. Referentni tipovi ne mogu biti zanemarivi tipovi jer imaju podršku za null - to jest, vrijednost null možete dodijeliti bilo kojem referentnom tipu. Tip vrijednosti potječe System.ValueTypei sadrži podatke unutar vlastite alokacije memorije. Drugim riječima, varijable ili objekti ili vrste vrijednosti imaju vlastitu kopiju podataka.

Naprotiv, referentni tip se proteže System.Objecti usmjerava na mjesto u memoriji koje sadrži stvarne podatke. Treba imati na umu da se svi unarni i binarni operatori koji se mogu koristiti za vrstu vrijednosti mogu primijeniti i na njezin poništavajući kolega. Sljedeći isječak koda ilustrira sintaksu za definiranje poništavajućeg tipa u C #.

System.Nullable variable = null;

or

T? variable = null;

Ovdje Tpredstavlja tip podataka varijable. Sljedeći se izraz ne bi kompajlirao jer ne možete dodijeliti null vrijednost vrsti vrijednosti.

Int32 i = null;

Da biste vrsti vrijednosti dodijelili null vrijednost, morate iskoristiti tip koji se može poništiti, kao što je prikazano u isječku koda u nastavku.

Int32? i = null;

The HasValuei Valuesvojstva

Postoje dva javna svojstva samo za čitanje HasValuei Value, u primjeru nullable tipa. Dok se prva koristi za provjeru sadrži li nullable varijabla vrijednost, druga se koristi za dohvaćanje vrijednosti sadržane u nullable varijabli. Imajte na umu da HasValueima zadanu vrijednost false. Sljedeći popis kodova ilustrira kako se HasValuei Valuesvojstva mogu koristiti.

 static void Main(string[] args)

        {

            Int32? i = 100;

            if (i.HasValue)

            {

                Console.WriteLine("The value of the variable i is: "+i.Value);

            }

            else

            {

                Console.WriteLine("The value of the variable i is undefined.");

            }

            Console.ReadLine();

        }

Imajte na umu da također možete provjeriti je li vrijednost promjenjive varijable nula, kao što je prikazano u isječku koda u nastavku.

Int32? i = 100;

if(i != null)

Console.Writeline("The value of the variable i is not null");

Implicitne i eksplicitne pretvorbe

Nullable type možete prebaciti u non nullable type ili eksplicitno ili pomoću Valuesvojstva. Sljedeći isječak koda to ilustrira.

Int32? i = null;

Int32 j = (Int32)i;

Treba imati na umu da biste, ako slučaj s nullable tipom stavite na non nullable tip, a nullable type sadrži null vrijednost, mogli naići InvalidOperationException.

Sljedeći isječak koda ilustrira kako možete napraviti implicitno emitiranje kada radite s poništavajućim tipom.

Int32? i = null;

i = 100;

Nulti operater spajanja ( ??)

Nulti operater spajanja (predstavljen kao ??) koristi se za definiranje zadane vrijednosti koja bi se vratila kada nenulirajućem tipu dodijelite nullable tip. Evo primjera koda koji to ilustrira.

Int32? i = null;

Int32 j = i ?? 100;

Console.WriteLine("The value of the variable j is: " + j);

Vrijednost varijable idodjeljuje se jako i nije null. Ako je vrijednost varijable inull, varijabli se dodjeljuje cijela vrijednost 100 j. Ovako funkcionira null operator spajanja.