Manchmal vergesse ich, den Rückgabewert zu verwenden, wenn ich zu habe. Zum Beispiel
%Vor%Dies gilt auch für meine benutzerdefinierten wertähnlichen Klassen, in denen ich beispielsweise fließende x.WithSomething () -Methoden verwende, die ein neues Wertobjekt zurückgeben, anstatt x zu ändern.
Eine Lösung wäre die Verwendung von Komponententests. Dies ist jedoch nicht immer zutreffend. Also, wie erzwinge ich einen Compiler - oder zumindest Laufzeit - Fehler, wenn der zurückgegebene Wert nicht verwendet wird?
Vielleicht gibt es eine ReSharper oder VS Lösung?
UPDATE: OK, es wird nicht durch Sprache erzwungen. Also null-Argumente sind, aber ich kann noch eine Ausnahme auslösen, wenn Argument null ist. Und ReSharper kann mich vor vielen Dingen warnen, die von C # nicht erzwungen werden. Aber ich sehe keine Möglichkeit, dasselbe für den nicht verwendeten Rückgabewert zu tun - für die Rückgabewerte, die ich verwenden möchte.
Wenn nicht für Systemfunktionen (wie string.Replace), aber zumindest für meine eigenen Klassen - gibt es einen Weg? Wie, RequiredReturn & lt; T & gt; oder so ähnlich.
UPDATE: Was ist mit AOP / PostSharp? Wenn ich den Rückgabewert oder die Methode mit [UsageRequired] markiere, kann ich irgendwie feststellen, dass PostSharp den Rückgabewert verwendet hat?
(notieren Sie das C # -Tag)
Haben Sie in Betracht gezogen, FxCop (oder Visual Studio Code Analysis, falls vorhanden) zu verwenden? Es enthält eine Regel, die die Verwendung von Rückgabewerten bestimmter vordefinierter Kategorien von Methoden überprüft. Wenn Ihre Auslassungen nicht von der Regel erfasst werden, können Sie eine benutzerdefinierte Regel erstellen, die nach ihnen sucht. (Die integrierte Regel würde das String.Replace-Problem in Ihrem Beispiel abfangen.)
Wenn es wirklich wichtig ist, dass Sie mit dem Ausgabewert umgehen, können Sie der Funktion einen Wert als Referenz übergeben und diesen mit der Funktion setzen, anstatt sie zurückzugeben.
Auf diese Weise wird der Code, der die Funktion aufruft, gezwungen, den Ausgabewert zu berücksichtigen, indem er ihn zur Kompilierzeit als Parameter zur Verfügung stellt
Sie nicht.
Es ist die gleiche Frage wie die Frage, wie ich daran denke, meiner GetSomeStuff () Methode etwas zuzuweisen?
Zum Beispiel mache ich weiter:
%Vor%Aber es sollte sein:
%Vor%Denk nur daran. Einfach.
Zu einer verwandten Notiz, persönlich, Ich denke, die Replace-Methode sollte keine Instanzmethode sein, wenn sie die Instanz nicht beeinflusst (und ja, ich bin mir bewusst, dass Strings unveränderlich sind). Die Namensgebung sollte besser widerspiegeln, dass es sich um eine Instanzmethode für ein unveränderliches Objekt handelt.
Bearbeiten: Um besser widerzuspiegeln, was ich sagen wollte, und meinen Kommentar dazu schreiben.
Ah. Ich habe gerade bemerkt, dass es eine Option in Resharper 4.5 gibt, um "Nicht verwendete Rückgabewerte von nicht-privaten Methoden" zu entdecken, das könnte genau das sein, was du willst.
Verwenden Sie das Plugin für Visual Studio, Nachschärfen . Dieses Plugin informiert Sie während des Schreibens von dummem Code.
Es gibt keine Laufzeitlösung.
Es gibt eine Option auf der ReSharper-Seite "Inspection Severity" mit dem Namen "Method return value wird nie verwendet". Sie könnten versuchen, dies auf "Als Fehler anzeigen" zu setzen.
BEARBEITEN Scheinbar nicht ganz das, was benötigt wird - es zeigt Methoden, deren Rückgabewert nie ist, irgendwo an. Ich hätte das vom Namen merken sollen!
Warum schreibst du nicht dein eigenes Werkzeug? Auf der grundlegendsten Ebene könnten Sie Ihre Quelle nach Ihrer Methode und Ihrem Bericht und Fehler suchen, wenn nicht "=" vorangestellt ist (unter Berücksichtigung, dass der Code möglicherweise über mehrere Zeilen verteilt ist). Auf dieser Ebene ist es nicht interaktiv, aber wenn es funktioniert, könntest du es in ein VS-Plugin umwandeln.
Das kann man in keiner Sprache tun, die der C-Syntax folgt - C, C ++ oder C #. Der Aufrufer der Funktion kann den Rückgabewert ignorieren.
Tags und Links c#