Ich habe mir den mvc-mini-Profiler angesehen, der vom Stack Overflow-Team auf Google Code entworfen wurde, und eine Sache auf Anfang Seite erschien mir als besonders seltsam:
%Vor% Wie kann es "ok" sein, wenn profiler null ist? Es scheint mir, dass das Aufrufen von Step einen NullReferenceException
werfen würde. In all den Jahren, in denen ich C # programmiert habe, habe ich nie gewusst, dass eine Methode für eine NULL-Referenz in irgendeinem Kontext "ok" sein könnte. Ist das ein Sonderfall im Zusammenhang mit einer using-Klausel?
Ich kann verstehen, dass es in Ordnung ist (wusste es nicht, aber anscheinend ist es das?):
%Vor%, aber das Aufrufen einer Methode für eine NULL-Referenz scheint so zu sein, als ob sie eine Ausnahme auslösen sollte, unabhängig davon, ob sie sich in einer using-Klausel befindet. Kann jemand bitte erklären, wie solch ein Konstrukt hinter die Kulissen übersetzt wird, damit ich verstehen kann, warum es in Ordnung ist, dies zu tun?
Es ist absolut nicht OK, wenn profiler
null ist , es sei denn profiler.Step
ist eigentlich eine Erweiterungsmethode. Die using
-Anweisung hat keinen Einfluss darauf.
Wie sich herausstellt, ist der Teil der Erweiterungsmethode genau das, was vor sich geht. Zeilen 584-587 von MiniProfiler.cs:
%Vor% So ist es in Ordnung, wenn profiler.Step
aufgerufen wird, wenn profiler
null ist. Es ist keine Instanzmethode - der Aufruf lautet:
Es ist in Ordnung für profiler.Step
to return null, wie im zweiten Teil Ihrer Frage.
Step
muss eine Erweiterungsmethode sein war meine Vermutung in dem Kommentar.
Sonst ist entweder dein Compiler verstümmelt oder du halluzinierst. : -)
Wow, so eine gute Frage. Meine erste Reaktion war "natürlich ist das nicht gut" ... aber ich tippte es in VS2010 und schien glücklich.
Ich habe eine mögliche Antwort für Sie gefunden (macht mich das zu einem Proxy?): Anweisung mit einem Null-Objekt verwenden
Wenn ich es wäre, würde ich einen Komponententest schreiben, um dieses Verhalten zu validieren, damit der Test fehlschlägt, wenn er sich in Zukunft ändert.
Bis ja
Tags und Links c# null nullreferenceexception