Ohjelmointi

Kuinka työskennellä tyhjennettävien tyyppien kanssa C #: ssä

C # -kieli tukee kahta tietotyyppiä: arvotyyppejä ja viitetyyppejä. Vaikka tyypin muuttuja Järjestelmä on viitetyyppi, tyypin muuttuja Int32 on arvotyyppi.

Nolla-arvon määrittäminen arvotyypille oli haaste pitkään, kunnes nollattavien tyyppien käsite otettiin käyttöön. Et voi määrittää nolla-arvoa suoraan arvotyypille. Et voi määrittää nolla-arvoa suoraan arvotyypille. Voit määrittää nolla-arvon arvotyypille vain hyödyntämällä nollaamattomia tyyppejä - ominaisuus, joka lisätään .Net Frameworkin uusimpiin versioihin.

C # -ohjelmointikielellä on otettu käyttöön nollaamattomat tyypit. Nämä ovat nimettyä rakennetta Järjestelmä. Nollattavaa tyyppiä käytettäessä arvotyypin sallitulla alueella olevan arvon lisäksi voi olla myös nolla-arvo. Siksi, jos sinulla on mitätöitävä looginen muuttuja, mahdolliset arvot, jotka voit määrittää loogiselle muuttujalle, ovat true, false tai null. Tämä ominaisuus on kätevä varsinkin kun työskentelet tietokannassa olevien tietojen kanssa ja haluat määrittää arvot arvotyypeille, jotka voivat olla tyhjiä tai eivät.

Huomaa, että arvotyypit voivat olla mitätöitäviä - et voi olla mitätöimättömiä viitetyyppejä. Viitetyypit eivät voi olla mitätöitäviä tyyppejä, koska niillä on tuki nullille - ts. Voit määrittää arvon null mille tahansa viitetyypille. Arvotyyppi on peräisin System.ValueType ja sisältää tiedot oman muistinsa sisällä. Toisin sanoen muuttujilla tai esineillä tai arvotyypeillä on oma kopio tiedoista.

Päinvastoin, viitetyyppi laajenee Järjestelmä Objekti ja osoittaa muistissa olevaan sijaintiin, joka sisältää todelliset tiedot. On huomattava, että mitä tahansa arvotyypissä käytettäviä unaarisia ja binaarisia operaattoreita voidaan soveltaa myös sen mitätöitävään vastineeseen. Seuraava koodinpätkä kuvaa syntaksin mitätöitävän tyypin määrittelemiseksi C #: ssä.

System.Nullable muuttuja = null;

tai

T? muuttuja = nolla;

Tässä, T edustaa muuttujan tietotyyppiä. Seuraava lause ei käänny, koska et voi määrittää nolla-arvoa arvotyypille.

Int32 i = nolla;

Jos haluat määrittää nolla-arvon arvotyypille, sinun on hyödynnettävä nollattamatonta tyyppiä alla olevan koodinpätkän mukaisesti.

Int32? i = nolla;

HasValue ja Arvo ominaisuudet

Julkisia vain luku -ominaisuuksia on kaksi, HasValue ja Arvo, mitätöitävän tyypin esiintymässä. Ensimmäistä käytetään tarkistamaan, sisältääkö nullable-muuttuja arvon, jälkimmäistä käytetään noutamattoman muuttujan sisällä olevan arvon noutamiseen. Ota huomioon, että HasValue on oletusarvo väärä. Seuraava koodiluettelo kuvaa, miten HasValue ja Arvo ominaisuuksia voidaan käyttää.

staattinen void Main (merkkijono [] args)

        {

Int32? i = 100;

if (i.HasValue)

            {

Console.WriteLine ("Muuttujan i arvo on:" + i.Value);

            }

muu

            {

Console.WriteLine ("Muuttujan i arvo on määrittelemätön.");

            }

Console.ReadLine ();

        }

Huomaa, että voit myös tarkistaa, onko tyhjennettävän muuttujan arvo nolla, kuten alla olevassa koodinpätkässä näkyy.

Int32? i = 100;

jos (i! = null)

Console.Writeline ("Muuttujan i arvo ei ole nolla");

Epäsuorat ja eksplisiittiset konversiot

Voit lähettää mitätöitävän tyypin ei-mitätöitäväksi joko nimenomaisesti tai käyttämällä Arvo omaisuus. Seuraava koodinpätkä kuvaa tätä.

Int32? i = nolla;

Int32 j = (Int32) i;

On huomattava, että jos tapaus mitätöitäväksi tyypiksi ei-mitätöitäväksi tyypiksi ja tyhjä tyyppi sisältää tyhjän arvon, saatat kohdata InvalidOperationException.

Seuraava koodinpätkä kuvaa, miten voit tehdä implisiittisen suoratoiston työskennellessäsi tyhjennettävän tyypin kanssa.

Int32? i = nolla;

i = 100;

Nolla yhdistymisoperaattori (??)

Nolla yhdistymisoperaattori (edustettuna nimellä ??) käytetään määrittämään oletusarvo, joka palautetaan, kun määrität mitätöimättömän tyypin. Tässä on koodiesimerkki, joka kuvaa tätä.

Int32? i = nolla;

Int32 j = i ?? 100;

Console.WriteLine ("Muuttujan j arvo on:" + j);

Muuttujan arvo i on osoitettu j jos en ole nolla. Jos muuttujan arvo i on nolla, muuttujalle määritetään kokonaisluku 100 j. Näin null-yhdistämisoperaattori toimii.

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