Πριν από το C# 8.0, όλοι οι τύποι αναφοράς μπορούσαν να είναι μηδενικοί. Οι μηδενικοί τύποι αναφοράς αναφέρονται σε ένα σύνολο χαρακτηριστικών που εισάγονται στο C# 8.0 που μπορούν να χρησιμοποιηθούν γιαΕλαχιστοποιήστε την πιθανότητα ο κώδικάς σας να προκαλέσει ρίψεις χρόνου εκτέλεσης。 Οι τύποι αναφοράς με δυνατότητα null περιλαμβάνουν τρία χαρακτηριστικά που βοηθούν στην αποφυγή αυτών των εξαιρέσεων, συμπεριλαμβανομένης της δυνατότητας ρητής επισήμανσης τύπων αναφοράς ως μηδενήριων:
- Βελτιστοποιημένη ανάλυση στατικής ροής για να προσδιοριστεί εάν μια μεταβλητή είναι μηδενική πριν από την κατάργηση της αναφοράς της.
- Χαρακτηριστικά που χρησιμοποιούνται για τον σχολιασμό του API, έτσι ώστε η Ανάλυση ροής να προσδιορίζει τη μηδενική κατάσταση.
- Σχολιασμοί μεταβλητών που μπορούν να χρησιμοποιήσουν οι προγραμματιστές για να δηλώσουν ρητά την αναμενόμενη μηδενική κατάσταση μιας μεταβλητής.
Η ανάλυση μηδενικής κατάστασης και οι σχολιασμοί μεταβλητών είναι απενεργοποιημένοι από προεπιλογή για υπάρχοντα έργα, πράγμα που σημαίνει ότι όλοι οι τύποι αναφοράς εξακολουθούν να είναι μηδενισμένοι. Ξεκινώντας με το .NET 6, αυτές οι δυνατότητες είναι ενεργοποιημένες από προεπιλογή για νέα έργα.
Τεκμηρίωση:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Τι πρέπει να κάνει ένας τύπος αναφοράς που μπορεί να είναι nullΕλαχιστοποιήστε την πιθανότητα η εφαρμογή σας να ρίξει ένα System.NullReferenceException κατά το χρόνο εκτέλεσης。
Σε ένα έργο που αναπτύσσω με το .NET 6, δημιουργώ μια ιδιότητα Name για μια νέα ιδιότητα που μου ζητά την ακόλουθη προειδοποίηση:
Κατά την έξοδο από τον κατασκευαστή, η μη μηδενική ιδιότητα "Όνομα" πρέπει να περιέχει μια μη μηδενική τιμή. Εξετάστε το ενδεχόμενο να δηλώσετε το ακίνητο ως άκυρο.
Αν και είναι προειδοποίηση, είναι πολύ ενοχλητικό! Πώς να διορθώσετε αυτήν την προειδοποίηση; Η προεπιλεγμένη τιμή για την εκχώρηση είναι μια κενή συμβολοσειρά και ο κωδικός είναι ο εξής:
Δηλαδή, όταν η ιδιότητα δεν εκχωρείται με μη αυτόματο τρόπο, η προεπιλεγμένη τιμή της ιδιότητας είναι μια κενή συμβολοσειρά.
Όταν χρησιμοποιείτε μια τοπική μεταβλητή,Ο τύπος είναι συμβολοσειρά; μπορεί επίσης να δημιουργήσει προειδοποιήσεις, όπως φαίνεται στο παρακάτω σχήμα:
λύση, προσδιορίστε εάν η μεταβλητή είναι null πριν τη χρησιμοποιήσετε και, εάν είναι, μην εκτελέσετε τον παρακάτω κώδικα ή νομίζετε ότιΗ μεταβλητή δεν μπορεί ποτέ να είναι μηδενική, μπορεί να χρησιμοποιηθείArgumentNullException.ThrowIfNull(assemblyFullName); Οι προειδοποιήσεις μπορούν επίσης να αφαιρεθούν! Με άλλα λόγια, εάν η μεταβλητή είναι μηδενική, θα ρίξει μια εξαίρεση απευθείας κατά τη διάρκεια του χρόνου εκτέλεσης!
Περίληψη: Το C# 8.0 εισήγαγε αυτήν τη δυνατότητα και προσωπικά πιστεύω ότι είναι για να βελτιώσει την αυστηρότητα των προγραμματιστών και να αποφύγει κάποια λάθη χαμηλού επιπέδου.
Για περισσότερες λύσεις μεθόδων που μπορεί να είναι μηδενικές, ανατρέξτε στο:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
|