Hat jemand Metriken zur Durchführung von Nulltests im Vergleich zu Wrapping-Code in einem Versuch fangen?
Ich vermute, dass der Null-Test viel effizienter ist, aber ich habe keine empirischen Daten.
Die Umgebung ist C # / .net 3.x und der Codevergleich ist:
%Vor%versus
%Vor%Gibt es irgendwelche Vorteile beim Einpacken in try catch?
Wenn null ein möglicher erwarteter Wert ist, dann teste auf Null. Wenn Sie den Null-Test nicht mögen und einen Standardwert haben, können Sie den null coelescing-Operator verwenden, um den Standardwert festzulegen:
%Vor%Speichern Sie try / catch für Ausnahmen (wirklich unerwartete Ereignisse).
Wenn kompakter Code das ist, nach dem Sie wirklich suchen, können Sie:
%Vor% Der Operator ??
gibt den ersten Nicht-Null-Wert zweier Werte zurück, wenn einer vorhanden ist.
Danke
Ich würde denken, dass dies der schnellste Weg wäre:
%Vor%Die ?? Operator ist eine Verknüpfung für die Null-Überprüfung, wenn Sie einen bestimmten Wert zuweisen möchten, wenn dieser null ist.
Wie auch immer, Ausnahmen erzeugen nicht nur ein neues Objekt, sondern erzeugen auch einen Stack-Trace, der die Dinge verlangsamt.
Ausnahmen benötigen zusätzliche Speicher sowie Zeit, um zu fangen. Es ist IMMER besser, auf Null zu prüfen, wenn es ein möglicher Wert ist.
Eine andere Sache, die es zu berücksichtigen gilt: Es ist einfach weniger Code und besser lesbar, um den Null-Test durchzuführen. Normalerweise hat try / catch-Blöcke im Normalfall keinen Overhead für den Code, aber wenn die Ausnahme ausgelöst wird, ist es ziemlich teuer.
Ich stimme @Justin Niessner zu. Außerdem sollten Sie diesen Artikel lesen, der einige interessante Punkte aufzeigt.
Ausnahme sollte in diesem Fall gut funktionieren, aber ich glaube Nummer 1 ist der beste Weg zu gehen. Eine Ausnahme sollte nicht als If / else-Anweisung verwendet werden. Eine Ausnahme löst einen Fehler aus, der mehr Systemressourcen beansprucht als der erste Vergleich.
NIEMALS Ausnahmen für den Programmkontrollfluss verwenden. Das einzige Mal, an dem Sie eine Ausnahme erstellen möchten, ist, dass (Dude)Session["xxxx"];
null ist, um die Funktion der Methode, in der Sie sich befanden, zu stoppen. Wenn also ein Nullwert vorhanden wäre, würde diese Methode die gewünschte Funktion nicht ausführen ausführen. Wenn Sie die Frage geschrieben haben, ob Sie in diesem Fall nur noch einen neuen Dude () erstellen müssen, ist dies nicht der Fall, also ist eine Ausnahme nicht gerechtfertigt.
Verwenden Sie Ausnahmen für Ausnahmefälle - nicht normalen Programmablauf.
Wenn Sie viele Null-Tests durchführen müssen, sollten Sie das Null-Objekt-Muster verwenden, anstatt es zu verwenden echte Nullen, die auf einen nicht vorhandenen Wert hinweisen, der möglicherweise ein Standardverhalten aufweist.
Ich war immer etwas misstrauisch gegenüber dem Null-Objekt-Muster, bis ich anfing, Objective-C zu verwenden, wo es das eingebaute Verhalten ist. Es macht wirklich eine Menge Code sauber (aber es ist natürlich immer noch nicht immer passend).
Da Sie nur nach Null suchen wollen, sollten Sie das tun. Es ist effizienter als eine Ausnahme zu fangen.
Auch beim Abfangen von Ausnahmen sollten Sie sehr genau sein und nur genau das erreichen, was Sie erwarten. Wenn Sie irgendeine Art von Ausnahme abfangen, riskieren Sie Fehler, die Sie nicht erwartet haben, und behandeln sie falsch.
Tags und Links c#