Ennen C# 8.0:aa kaikki viitetyypit saattoivat olla nulleja. Null-viitetyypit viittaavat joukkoon ominaisuuksia, jotka esiteltiin C# 8.0:ssa ja joita voidaan käyttääMinimoi todennäköisyys, että koodisi aiheuttaa ajonaikaisia heittoja。 Nollattavat viitetyypit sisältävät kolme ominaisuutta näiden poikkeusten välttämiseksi, mukaan lukien mahdollisuus merkitä viitetyypit nimenomaisesti nollattaviksi:
- Optimoitu staattinen virtausanalyysi sen määrittämiseksi, onko muuttuja nolla ennen kuin sitä ei viitdata.
- Attribuutit, joita käytetään API:n annotointiin, jotta Stream Analytics määrittää null-tilan.
- Muuttujamerkinnät, joita kehittäjät voivat käyttää ilmaistakseen muuttujan odotetun nollatilan eksplisiittisesti.
Nollatila-analyysi ja muuttujien annotaatiot ovat oletuksena pois käytöstä olemassa olevista projekteista, mikä tarkoittaa, että kaikki viitetyypit ovat edelleen nollattavissa. Alkaen .NET 6:sta, nämä ominaisuudet ovat oletuksena käytössä uusissa projekteissa.
Dokumentaatio:Hyperlinkin kirjautuminen on näkyvissä.
Mikä viitetyyppi, joka voi olla nolla, on tehdäMinimoi mahdollisuus, että sovelluksesi heittää System.NullReferenceExceptionin ajonaikaisesti。
Projektissa, jota kehitän .NET 6:lla, luon Name-ominaisuuden uudelle ominaisuudelle, joka antaa seuraavan varoituksen:
Kun konstruktori poistuu, ei-nollattavalla ominaisuudella "Nimi" täytyy olla ei-nollaarvo. Harkitse omaisuuden julistamista mitättömyydeksi.
Vaikka se onkin varoitus, se on todella ärsyttävää! Miten korjata tämä varoitus? Oletusarvo on tyhjä merkkijono, ja koodi on seuraava:
Eli kun ominaisuutta ei ole manuaalisesti määritetty, ominaisuuden oletusarvo on tyhjä merkkijono.
Kun käytetään paikallista muuttujaa,Tyyppi on lanka? voi myös aiheuttaa varoituksia, kuten alla olevassa kuvassa näkyy:
ratkaisu, selvitä, onko muuttuja nolla ennen sen käyttöä, ja jos on, älä suorita alla olevaa koodia, muuten ajatteletMuuttuja ei voi koskaan olla nolla, voidaan käyttääArgumentNullException.ThrowIfNull(assemblyFullName); Varoitukset voidaan myös poistaa! Toisin sanoen, jos muuttuja on nolla, se heittää poikkeuksen suoraan ajonajan aikana!
Yhteenveto: C# 8.0 toi tämän ominaisuuden, ja koen henkilökohtaisesti, että se on kehittäjien tarkkuuden parantamiseksi ja matalan tason virheiden välttämiseksi.
Lisää nollatasoisia menetelmäratkaisuja löytyy osoitteesta:Hyperlinkin kirjautuminen on näkyvissä.
|