Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Memahami dan Membetulkan \"Rujukan Objek Tidak Ditetapkan kepada Contoh Objek\" dalam C#

Memahami dan Membetulkan \"Rujukan Objek Tidak Ditetapkan kepada Contoh Objek\" dalam C#

王林
王林asal
2024-07-19 01:15:19688semak imbas

Understanding and Fixing

pengenalan

Salah satu ralat yang paling biasa dan mengecewakan yang dihadapi oleh pembangun C# ialah rujukan Objek terkenal yang tidak ditetapkan kepada tika objek. Mesej ralat ini boleh mengelirukan, terutamanya bagi mereka yang baru dalam pengaturcaraan. Dalam artikel ini, kami akan menjelaskan ralat ini, menerangkan puncanya, memberikan analogi kehidupan sebenar yang tidak dapat dilupakan dan menawarkan penyelesaian untuk mencegah dan membetulkannya.

Apakah Maksud "Rujukan Objek Tidak Ditetapkan kepada Contoh Objek"?
Dalam istilah orang awam, ralat ini berlaku apabila anda cuba menggunakan objek yang belum dibuat lagi. Ia seperti cuba memandu kereta yang belum dibina—anda tidak boleh menggunakan sesuatu yang tidak wujud.

Dari segi teknikal, ralat ini ialah NullReferenceException. Ia berlaku apabila anda cuba mengakses ahli (kaedah, harta, medan) objek yang batal. Objek nol bermakna rujukan objek menunjuk kepada tiada atau tiada contoh objek wujud dalam ingatan.

Analogi Kehidupan Sebenar
Bayangkan anda berada di rumah, dan anda ingin membuat panggilan telefon. Anda mencapai telefon anda, tetapi telefon itu tiada kerana anda tidak pernah membelinya. Dalam senario ini:

  • Telefon ialah objeknya.

  • Mencapai telefon adalah seperti cuba mengakses ahli objek.

  • Tiada telefon adalah seperti rujukan objek menjadi batal.

Jadi, apabila anda cuba membuat panggilan, anda tidak boleh, kerana telefon (objek) tidak wujud. Begitu juga, dalam kod anda, cubaan menggunakan objek yang belum diinstakan menyebabkan rujukan Objek tidak ditetapkan kepada kejadian ralat objek.

Senario dan Pembetulan Biasa:

- Objek Tidak Dimulakan

class Person
{
    public string Name { get; set; }
}

Person person = null;
Console.WriteLine(person.Name); // Throws NullReferenceException

Betulkan: Mulakan Objek

Person person = new Person();
person.Name = "John";
Console.WriteLine(person.Name); // No error

- Ahli Tidak Dimulakan dalam Kelas

class Car
{
    public Engine Engine { get; set; }
}

class Engine
{
    public int Horsepower { get; set; }
}

Car car = new Car();
Console.WriteLine(car.Engine.Horsepower); // Throws NullReferenceException

Betulkan: Mulakan Ahli

Car car = new Car { Engine = new Engine() };
car.Engine.Horsepower = 150;
Console.WriteLine(car.Engine.Horsepower); // No error

- Nol Pulangan daripada Kaedah

class Repository
{
    public Person GetPersonById(int id)
    {
        // Returns null if person not found
        return null;
    }
}

Repository repo = new Repository();
Person person = repo.GetPersonById(1);
Console.WriteLine(person.Name); // Throws NullReferenceException

Betulkan: Semak Nol

Person person = repo.GetPersonById(1);
if (person != null)
{
    Console.WriteLine(person.Name); // No error if person is not null
}
else
{
    Console.WriteLine("Person not found");
}

- Andaian Salah tentang Koleksi

List<Person> people = null;
Console.WriteLine(people.Count); // Throws NullReferenceException

Betulkan: Mulakan Koleksi

List<Person> people = new List<Person>();
Console.WriteLine(people.Count); // No error

Amalan Terbaik untuk Mengelakkan NullReferenceExceptions

  1. Gunakan Operator Tanpa Syarat

Pengendali bersyarat nol (?.) boleh membantu mengakses ahli objek yang mungkin nol dengan selamat.

Person person = null;
Console.WriteLine(person?.Name); // No error, outputs nothing

  1. Memulakan Pembolehubah dan Ahli

Sentiasa mulakan pembolehubah dan ahli kelas anda untuk mengelakkan rujukan nol.

class Car
{
    public Engine Engine { get; set; } = new Engine();
}

  1. Lakukan Pemeriksaan Batal

Sentiasa semak nol sebelum mengakses ahli objek.

if (person != null)
{
    Console.WriteLine(person.Name);
}

  1. Gunakan Navigasi Selamat dengan LINQ

Apabila menggunakan LINQ, pastikan koleksi tidak batal sebelum melakukan pertanyaan.

var names = people?.Select(p => p.Name).ToList();

Kesimpulan
Rujukan Objek yang tidak ditetapkan kepada contoh ralat objek ialah batu penghalang biasa untuk pembangun C#, tetapi memahami puncanya dan mengetahui cara mencegah dan membetulkannya boleh menjimatkan banyak sakit kepala. Sentiasa ingat untuk memulakan objek anda dan lakukan semakan nol jika perlu. Dengan mengambil kira amalan terbaik ini, anda akan dilengkapi dengan baik untuk mengendalikan dan mengelakkan ralat ini dalam projek masa hadapan anda.

Akaun LinkedIn : LinkedIn
Akaun Twitter: Twitter
Kredit: Grafik bersumberkan Log MasukRadius

Atas ialah kandungan terperinci Memahami dan Membetulkan \"Rujukan Objek Tidak Ditetapkan kepada Contoh Objek\" dalam C#. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:C, Perpustakaan PentingArtikel seterusnya:C, Perpustakaan Penting