Før C# 8.0 kunne alle referansetyper være null. Nullreferansetyper refererer til et sett med funksjoner introdusert i C# 8.0 som kan brukes forMinimer sannsynligheten for at koden din forårsaker kjøretidskast。 Nullbare referansetyper inkluderer tre funksjoner for å unngå disse unntakene, inkludert muligheten til eksplisitt å markere referansetyper som nullbare:
- Optimalisert statisk strømningsanalyse for å avgjøre om en variabel er null før den blir ureferert.
- Attributter som brukes til å annotere API-et slik at Stream Analytics bestemmer null-tilstanden.
- Variabelannotasjoner som utviklere kan bruke for eksplisitt å erklære forventet nulltilstand for en variabel.
Nulltilstandsanalyse og variabelannotasjoner er deaktivert som standard for eksisterende prosjekter, noe som betyr at alle referansetyper fortsatt kan nulles. Fra og med .NET 6 er disse funksjonene aktivert som standard for nye prosjekter.
Dokumentasjon:Innloggingen med hyperkoblingen er synlig.
Hva en referansetype som kan være null skal gjøreMinimer sjansen for at applikasjonen din kaster en System.NullReferenceException under kjøretid。
I et prosjekt jeg utvikler med .NET 6, oppretter jeg en navnegenskap for en ny egenskap som gir meg følgende advarsel:
Når man forlater konstruktøren, må den ikke-nullbare egenskapen "Navn" inneholde en ikke-null verdi. Vurder å erklære egenskapen som kan være null.
Selv om det er en advarsel, er det veldig irriterende! Hvordan fikse denne advarselen? Standardverdien for tildeling er en tom streng, og koden er som følger:
Det vil si, når egenskapen ikke tildeles manuelt, er standardverdien til egenskapen en tom streng.
Når man bruker en lokal variabel,Typen er tråd? kan også generere advarsler, som vist i figuren nedenfor:
Løsning: Finn ut om variabelen er null før du bruker den, og hvis den er det, ikke kjør koden under, eller du trorVariabelen kan aldri være null, kan brukesArgumentNullUnntak.KastIfNull(assemblyFullName); Advarsler kan også fjernes! Med andre ord, hvis variabelen er null, vil den kaste et unntak direkte under kjøretid!
Sammendrag: C# 8.0 introduserte denne funksjonen, og jeg føler personlig at den er for å forbedre utviklernes grundighet og unngå å gjøre noen lavnivåfeil.
For flere metodeløsninger som kan være null, vennligst se til:Innloggingen med hyperkoblingen er synlig.
|