Pred C# 8.0 mohli byť všetky typy referencií null. Typy nulových referencií označujú súbor vlastností zavedených v C# 8.0, ktoré možno použiť preMinimalizujte pravdepodobnosť, že váš kód spôsobí hody počas behu。 Nulovateľné typy referencií obsahujú tri funkcie, ktoré pomáhajú vyhnúť sa týmto výnimkám, vrátane možnosti explicitne označiť typy referencií ako neplatné:
- Optimalizovaná statická analýza prúdenia na zistenie, či je premenná nulová, ešte predtým, než sa prestane referencovať.
- Atribúty, ktoré sa používajú na anotáciu API tak, aby Stream Analytics určovala nulový stav.
- Anotácie premenných, ktoré môžu vývojári použiť na explicitné deklarovanie očakávaného nulového stavu premennej.
Analýza nulových stavov a anotácie premenných sú v existujúcich projektoch predvolene vypnuté, čo znamená, že všetky typy referencií sú stále nulovateľné. Od .NET 6 sú tieto funkcie predvolene zapnuté pre nové projekty.
Dokumentácia:Prihlásenie na hypertextový odkaz je viditeľné.
Čo znamená referenčný typ, ktorý môže byť null,Minimalizujte pravdepodobnosť, že vaša aplikácia počas behu hodí System.NullReferenceException。
V projekte, ktorý vyvíjam s .NET 6, vytváram vlastnosť Name pre novú vlastnosť, ktorá ma zobrazí nasledujúce varovanie:
Pri ukončení konštruktora musí nenulovateľná vlastnosť "Name" obsahovať nenulovú hodnotu. Zvážme vyhlásenie vlastnosti ako môže byť nulová.
Aj keď je to varovanie, je to veľmi otravné! Ako opraviť toto varovanie? Predvolená hodnota pre priradenie je prázdny reťazec a kód je nasledovný:
To znamená, že keď vlastnosť nie je manuálne priradená, predvolenou hodnotou vlastnosti je prázdny reťazec.
Pri použití lokálnej premennej,Typ je šnúrka? môže tiež generovať varovania, ako je znázornené na obrázku nižšie:
Riešenie: zistite, či je premenná null, predtým než ju použijete, a ak áno, nespúšťajte kód nižšie, alebo si myslítePremenná nikdy nemôže byť nulová, sa dá použiťArgumentNullException.ThrowIfNull(assemblyFullName); Varovania môžu byť tiež odstránené! Inými slovami, ak je premenná nulová, počas behu vyhodí výnimku!
Zhrnutie: C# 8.0 túto funkciu zaviedol a osobne cítim, že je to na zlepšenie náročnosti vývojárov a vyhnutie sa niektorým nízkoúrovňovým chybám.
Pre viac metódových riešení, ktoré môžu byť nulové, pozrite sa:Prihlásenie na hypertextový odkaz je viditeľné.
|