C# Academy · Oppitunti

Null-yhdistämisoperaattorit

??- ja ??=-oletusarvot.

Oppitunti 3/413 vaihetta

Null-yhdistämisoperaattorit on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.

Varaarvon antaminen

Usein haluatte käyttää arvoa, jos se on olemassa, tai oletusarvoa, jos se on null. Null-yhdistämisoperaattori ?? tekee juuri tämän.

a ?? b tarkoittaa: käytä a-arvoa, jos se ei ole null, ja muuten käytä b-arvoa.

string input = null;
string name = input ?? "Guest";
System.Console.WriteLine(name);

Miten ?? arvioidaan

Vasen puoli arvioidaan ensin. Jos sen arvo ei ole null, oikeaa puolta ei arvioida lainkaan.

Tämän oikosulkutoiminnan ansiosta kallis varaarvo lasketaan vain silloin, kun sitä todella tarvitaan.

string cached = "data";
string value = cached ?? Compute();
System.Console.WriteLine(value);
// Compute() is never called here

Toimii nullable-arvotyyppien kanssa

?? purkaa myös nullable-arvotyypit. Kun int? maybe yhdistetään lausekkeeseen ?? 0, tuloksena on tavallinen, ei-nullable int.

Tämä on selkeä tapa muuntaa tyyppi int? tyypiksi int oletusarvon avulla.

int? maybe = null;
int sure = maybe ?? 0;
System.Console.WriteLine(sure);

Suoritettava esimerkki

Tämä ohjelma lukee mahdollisesti null-arvoisen asetuksen ja käyttää tarvittaessa oletusarvoa. Suorittakaa ohjelma nähdäksenne varaarvon käytännössä.

using System;

class Program
{
    static void Main()
    {
        string theme = null;
        string active = theme ?? "light";
        Console.WriteLine("Theme: " + active);
    }
}

??-operaattorien ketjuttaminen

Voitte ketjuttaa useita varaarvoja. Lauseke valitsee ensimmäisen ei-null-arvon vasemmalta oikealle.

a ?? b ?? c kokeilee ensin arvoa a, sitten arvoa b ja lopuksi arvoa c viimeisenä vaihtoehtona.

string a = null;
string b = null;
string c = "default";
System.Console.WriteLine(a ?? b ?? c);

??=-operaattori

Null-yhdistävä sijoitusoperaattori ??= sijoittaa oikean puolen arvon vain, jos vasen puoli on parhaillaan null.

x ??= y on lyhyt muoto lausekkeelle if (x == null) x = y;, ja se jättää x-arvon ennalleen, jos sillä on jo arvo.

string config = null;
config ??= "default";
System.Console.WriteLine(config);
config ??= "ignored";
System.Console.WriteLine(config);

Laiska alustus ??=-operaattorilla

??=-operaattorin yleinen käyttötapaus on laiska alustus: olio luodaan vasta ensimmäisen kerran, kun sitä tarvitaan.

Myöhemmillä kutsukerroilla kentälle on jo asetettu arvo, joten ??= ei tee mitään.

System.Collections.Generic.List<int> items = null;
items ??= new System.Collections.Generic.List<int>();
items.Add(1);
System.Console.WriteLine(items.Count);

?.- ja ??-operaattorien yhdistäminen

?.- ja ??-operaattorien yhdistäminen on erittäin yleistä. ?. estää poikkeuksen, ja ?? antaa arvon, kun ketju on null.

user?.Name ?? "Unknown" lukee nimen turvallisesti ja käyttää oletuksena arvoa "Unknown".

string s = null;
int length = s?.Length ?? -1;
System.Console.WriteLine(length);

?? kokonaisessa ohjelmassa

Tässä ?. ja ?? toimivat yhdessä ja tulostavat pituuden turvallisesti. Suorittakaa ohjelma null-merkkijonolla nähdäksenne varaarvon käytännössä.

using System;

class Program
{
    static void Main()
    {
        string username = null;
        string display = username ?? "anonymous";
        Console.WriteLine(display);
        Console.WriteLine(username?.Length ?? 0);
    }
}

?? ja poikkeuksen heittäminen null-arvosta

??-operaattorin oikea puoli voi olla mikä tahansa lauseke, myös throw. Siksi ?? tarjoaa tiiviin tavan epäonnistua nopeasti odottamattoman null-arvon kohdalla.

name ?? throw new ArgumentNullException(nameof(name)) palauttaa nimen tai heittää poikkeuksen, jos nimi on null.

string Validate(string name) =>
    name ?? throw new System.ArgumentNullException(nameof(name));

Oikealta assosioituva toiminta

?? on oikealta assosioituva, joten a ?? b ?? c ryhmitellään muodossa a ?? (b ?? c).

Käytännössä tämä tarkoittaa edelleen, että ensimmäinen ei-null-arvo voittaa, mutta asia on hyvä tuntea monimutkaisia lausekkeita tarkasteltaessa.

int? a = null;
int? b = null;
int result = a ?? b ?? 99;
System.Console.WriteLine(result);

Pikatarkistus

Testatkaa, miten hyvin ymmärrätte null-yhdistämisoperaattorit.

Kertaus

?? palauttaa vasemman puolen, jos se ei ole null, ja muuten oikean puolen. Operaattoria voi myös ketjuttaa. ??= sijoittaa arvon vain, kun kohde on null, joten se sopii erinomaisesti laiskaan alustukseen.

Yhdistäkää nämä operaattoriin ?. turvallista ja tiivistä null-arvojen käsittelyä varten. Voitte käyttää myös muotoa ?? throw epäonnistuaksenne nopeasti.

Aloita maksutta

Opi C# tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
93
Oppitunnit
346

Usein kysytyt kysymykset

Onko oppitunti ”Null-yhdistämisoperaattorit” ilmainen?

Kyllä – oppitunnin ”Null-yhdistämisoperaattorit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Null-yhdistämisoperaattorit”?

??- ja ??=-oletusarvot. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Null-yhdistämisoperaattorit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?

Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Nullable-arvotyypit
  2. Null-ehdollinen operaattori
  3. Null-yhdistämisoperaattorit
  4. Null-arvoilta suojautuminen
← Takaisin: C# Academy