Heim > Backend-Entwicklung > C++ > Hauptteil

„Objektverweis nicht auf eine Instanz eines Objekts festgelegt' in C# verstehen und beheben

王林
Freigeben: 2024-07-19 01:15:19
Original
776 Leute haben es durchsucht

Understanding and Fixing

Einführung

Einer der häufigsten und frustrierendsten Fehler, auf den C#-Entwickler stoßen, ist die berüchtigte Objektreferenz, die nicht auf eine Instanz eines Objekts gesetzt ist. Diese Fehlermeldung kann insbesondere für Programmieranfänger verwirrend sein. In diesem Artikel werden wir diesen Fehler entmystifizieren, seine Ursachen erklären, eine einprägsame Analogie aus dem wirklichen Leben liefern und Lösungen anbieten, um ihn zu verhindern und zu beheben.

Was bedeutet „Objektreferenz nicht auf eine Instanz eines Objekts festgelegt“?
Für Laien ausgedrückt: Dieser Fehler tritt auf, wenn Sie versuchen, ein Objekt zu verwenden, das noch nicht erstellt wurde. Es ist, als würde man versuchen, ein Auto zu fahren, das noch nicht gebaut wurde – man kann nichts verwenden, was es nicht gibt.

Technisch gesehen handelt es sich bei diesem Fehler um eine NullReferenceException. Dies geschieht, wenn Sie versuchen, auf ein Element (Methode, Eigenschaft, Feld) eines Objekts zuzugreifen, das null ist. Ein Nullobjekt bedeutet, dass die Objektreferenz auf nichts oder keine Instanz des Objekts im Speicher verweist.

Analogie zum echten Leben
Stellen Sie sich vor, Sie sind zu Hause und möchten telefonieren. Sie greifen nach Ihrem Telefon, aber es ist nicht da, weil Sie noch nie eines gekauft haben. In diesem Szenario:

  • Das Telefon ist das Objekt.

  • Nach dem Telefon zu greifen ist wie der Versuch, auf ein Mitglied des Objekts zuzugreifen.

  • Das Fehlen des Telefons ist so, als wäre die Objektreferenz null.

Wenn Sie also versuchen, einen Anruf zu tätigen, ist dies nicht möglich, da das Telefon (Objekt) nicht existiert. Ebenso führt der Versuch, in Ihrem Code ein Objekt zu verwenden, das nicht instanziiert wurde, dazu, dass die Objektreferenz nicht auf eine Instanz eines Objekts gesetzt ist.

Häufige Szenarien und Korrekturen:

- Nicht initialisierte Objekte

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

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

Nach dem Login kopieren

Fix: Objekt initialisieren

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

Nach dem Login kopieren

- Nicht initialisierte Mitglieder in einer Klasse

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

Nach dem Login kopieren

Fix: Initialisieren Sie das Mitglied

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

Nach dem Login kopieren

- Null-Return von Methoden

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

Nach dem Login kopieren

Fix: Auf Null prüfen

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");
}

Nach dem Login kopieren

- Falsche Annahmen über Sammlungen

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

Nach dem Login kopieren

Fix: Sammlungen initialisieren

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

Nach dem Login kopieren

Best Practices zur Vermeidung von NullReferenceExceptions

  1. Null-Bedingungsoperatoren verwenden

Der nullbedingte Operator (?.) kann dabei helfen, sicher auf Mitglieder eines Objekts zuzugreifen, das möglicherweise null ist.

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

Nach dem Login kopieren
  1. Variablen und Mitglieder initialisieren

Initiieren Sie Ihre Variablen und Klassenmitglieder immer, um Nullreferenzen zu vermeiden.

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

Nach dem Login kopieren
  1. Nullprüfungen durchführen

Prüfen Sie immer auf Null, bevor Sie auf Mitglieder eines Objekts zugreifen.

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

Nach dem Login kopieren
  1. Sichere Navigation mit LINQ verwenden

Stellen Sie bei Verwendung von LINQ sicher, dass Sammlungen nicht null sind, bevor Sie Abfragen durchführen.

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

Nach dem Login kopieren

Fazit
Der Objektverweis, der nicht auf eine Instanz eines Objektfehlers gesetzt ist, ist ein häufiger Stolperstein für C#-Entwickler, aber wenn Sie die Ursache verstehen und wissen, wie Sie ihn verhindern und beheben können, können Sie sich viel Kopfzerbrechen ersparen. Denken Sie immer daran, Ihre Objekte zu initialisieren und bei Bedarf Nullprüfungen durchzuführen. Mit diesen Best Practices im Hinterkopf sind Sie gut gerüstet, um diesen Fehler in Ihren zukünftigen Projekten zu bewältigen und zu vermeiden.

LinkedIn-Konto: LinkedIn
Twitter-Konto: Twitter
Credit: Grafiken stammen von LoginRadius

Das obige ist der detaillierte Inhalt von„Objektverweis nicht auf eine Instanz eines Objekts festgelegt' in C# verstehen und beheben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage