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
Fix: Objekt initialisieren
Person person = new Person(); person.Name = "John"; Console.WriteLine(person.Name); // No error
- 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
Fix: Initialisieren Sie das Mitglied
Car car = new Car { Engine = new Engine() }; car.Engine.Horsepower = 150; Console.WriteLine(car.Engine.Horsepower); // No error
- 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
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"); }
- Falsche Annahmen über Sammlungen
List<Person> people = null; Console.WriteLine(people.Count); // Throws NullReferenceException
Fix: Sammlungen initialisieren
List<Person> people = new List<Person>(); Console.WriteLine(people.Count); // No error
Best Practices zur Vermeidung von NullReferenceExceptions
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
Initiieren Sie Ihre Variablen und Klassenmitglieder immer, um Nullreferenzen zu vermeiden.
class Car { public Engine Engine { get; set; } = new Engine(); }
Prüfen Sie immer auf Null, bevor Sie auf Mitglieder eines Objekts zugreifen.
if (person != null) { Console.WriteLine(person.Name); }
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();
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!