Memahami NullReferenceExceptions dalam .net
A. Ini biasanya berlaku apabila pemboleh ubah belum dimulakan, atau apabila kaedah kembali NullReferenceException
tanpa diduga. null
null
null
objectA.objectB.propertyC
objectA
objectB
null
Titik pemecahan strategik: Penjejakan rujukan:
Gunakan ciri "Cari Semua Rujukan" IDE anda untuk mengesan bagaimana pembolehubah digunakan sepanjang kod anda, membantu menentukan isu -isu yang berpotensi.null
:
2. Nilai lalai:
memberikan nilai lalai sekiranya rujukan mungkin: null
void PrintName(Person p) { if (p != null) Console.WriteLine(p.Name); }
3. Pengecualian tersuai:
mengendalikan potensi nilai dengan membuang pengecualian tersuai yang lebih bermaklumat: null
string GetCategory(Book b) { return b?.Category ?? "Unknown"; //Null-conditional operator and null-coalescing operator }
4. Pengendali null-conditional () dan akses ahli null-conditional ():
null
Pengendali ini memberikan pemeriksaan null ringkas:
string GetCategory(string bookTitle) { var book = library.FindBook(bookTitle); if (book == null) throw new BookNotFoundException(bookTitle); return book.Category; }
5. Konteks null (c# 8 dan kemudian): ?.
?[]
memanfaatkan ciri konteks null untuk menguatkuasakan pemeriksaan null yang lebih ketat pada masa penyusunan.
Pertimbangan Tambahan:
var title = person?.Title?.ToUpper(); //Only executes if person and Title are not null. int[] myIntArray = null; var elem = myIntArray?[i]; //Only accesses index i if myIntArray is not null.
FirstOrDefault()
dan SingleOrDefault()
, yang boleh kembali null
. GetValueOrDefault()
untuk jenis nilai nullable. Dengan secara konsisten menerapkan strategi ini, anda dapat mengurangkan kejadian NullReferenceExceptions
dengan ketara dan membuat aplikasi yang lebih mantap dan boleh dipercayai.
Atas ialah kandungan terperinci Apa yang menyebabkan NullReferenceExceptions dan bagaimana mereka boleh dielakkan dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!