Laden...

Kann das Programm aus einer NullReferenceException ermitteln, welche Variable null war?

Erstellt von oehrle vor 9 Jahren Letzter Beitrag vor 9 Jahren 940 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 9 Jahren
Kann das Programm aus einer NullReferenceException ermitteln, welche Variable null war?

In meiner Anwendung wird eine riesen Datenmenge durchlaufen und Werte aus eine DB erfasst. Es kann vorkommen, dass irgend ein Wert NULL ist oder einfach "" ist. Ich habe auf die DB kein Einfluss, ich muss die Daten rausholen und verrechnen.
Nun, kann ich aus einer geworfenen Exception genau herausbekommen, umd welches Feld (Variable) es sich in der Klasse handelt, die einen ungültigen Wert zugewiesen bekommt? Oder muss ich jede Zuweisung mit try catch abfangen und sofort reagieren?

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo oehrle,

du solltest vor dem Zugriff (z.B. mit if) abfragen, ob der Zugriff erlaubt ist. Aus der Exception und dem StackTrace kann das Programm nicht erkennen, welche Variable genau null ist. Als Mensch bekommt man das natürlich heraus, siehe [FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt [finden und beheben].

Exceptions sind wie der Name sagt für Ausnahmesituationen gedacht, nicht für Fälle, die regelmäßig auftreten können und werden.

herbivore

W
872 Beiträge seit 2005
vor 9 Jahren

Ich würde an Deiner Stelle schon beim SQL/Zugriff auf die DB den null check machen.
Je früher Du die nulls verhinderst, desto einfacher wird es in der Folge.

2.080 Beiträge seit 2012
vor 9 Jahren

Das hängt von der Anforderung ab. Es könnte ja auch sein, dass der Datensatz trotzdem angezeigt wird, aber mit einer Visualisierung, dass ein Teil nicht vorhanden ist. Bei Personen-Daten dann z.B. eine Telefonnummer.

Allgemein würde ich aber immer dafür sorgen, dass jeder Teil im Programm für sich eigenständig intern vorkommende Fehler rechtzeitig abfangen und behandeln kann.

Bei Methoden (oder besonders auch bei Konstruktoren) sorge ich erst einmal dafür, dass die Parameter geprüft werden, wo ein Prüfen notwendig und ohne großen Aufwand möglich ist. Ein leerer Name kann z.B. nicht angegeben werden, dann werfe ich eine Exception.

Wenn ein Wert von der Datenbank kommt, dann prüfe ich, ob der Datenwert DbNull ist (Beim DataReader gibts dafür eine Methode) und handle dann entsprechend, je nach Anforderung eben.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 9 Jahren

Danke für die Info.