Wir haben mit unseren Mitarbeitern darüber gesprochen, was es bedeutet, wenn der Methodenname mit "Try" beginnt.
Es gab folgende Meinungen:
- Verwenden Sie "Try", wenn die Methode einen Nullwert zurückgeben kann.
- Verwenden Sie "Try", wenn die Methode keine Ausnahme auslöst.
Was ist die offizielle Definition? Was sagt "Try" im Methodennamen? Gibt es eine offizielle Richtlinie dazu?
c#
naming-conventions
ms007
quelle
quelle
Antworten:
Dies ist als TryParse- Muster bekannt und wurde von Microsoft dokumentiert. Auf der offiziellen MSDN-Seite für Ausnahmen und Leistung heißt es :
Wenn Sie also Code haben, für den ein regulärer Anwendungsfall bedeuten würde, dass er eine Ausnahme auslösen könnte (z. B. das Parsen eines Int), ist das TryParse- Muster sinnvoll.
quelle
(Korrigiert) Es gibt offizielle Richtlinien, wie Erik vorgeschlagen hat.
Wenn ich
TrySomething
Methode sehe , nehme ich es anbool
Something
Methode, mit der ich jede Ausnahme selbst behandeln kann. (bearbeiten, vorgeschlagen von Jesse Webb)quelle
TryFoo
Methode gibt, wird es eine ähnlicheFoo
Methode geben, mit der ich alle Ausnahmen selbst behandeln kann. Die Signaturen dieser Methoden sind wahrscheinlich unterschiedlich, sodass ihre Verwendung ohne andere Codeänderungen nicht austauschbar ist.Ich denke, Sie sollten verwenden,
try
wenn Sie fortfahren möchten. Es spielt keine Rolle, ob eine Methode einen Wert zurückgibt oder nicht.Fall 1: Wenn es gut zurückkehrt, können Sie auf irgendeine Weise fortfahren.
Fall 2: Wenn es nicht zurückkehrt: Es ist immer noch in Ordnung. Sie können auch anders vorgehen.
Und wenn Sie einen Wert als Ausgabe dieser Methode erwarten, verwenden Sie den
out
Parameter.Beispiel
quelle
Sie müssen "Try" im Methodennamen verwenden, wenn Sie die Tatsache manifestieren möchten, dass der Methodenaufruf zu einem ungültigen Ergebnis führen kann. Nach dem .NET-Standard ist es übrigens keine Funktion, die eine Ausnahme auslöst, sondern die Funktion, die einen Wert
VALID
oderNON_VALID
aus Programmsicht einen Wert zurückgibt .Am Ende dreht sich alles um die Namenskonvention, die Sie in Ihrer Gruppe verwenden möchten.
quelle
try
Stellen Sie sicher, dass Sie in Ihren Methodennamen aufnehmen, wenn:bool TrySomething(input, out yourReturn)
Wenn wir also
try
-methods verwenden, erhalten wir nur ein boolesches Ergebnis zurück.Der folgende Code löst also keine Ausnahmen aus:
Während dieser Code Ausnahmen auslösen kann (und in diesem Fall wird):
Die Verwendung von Try-Methoden ist eine sicherere und defensivere Methode zum Codieren. Auch die Ausführung des Code-Snippets Nr. 2 erfordert mehr Leistung, wenn es sich nicht um eine Ganzzahl handelt.
quelle
int number = int.Parse(input);
wenn Sie möchten, dass es in diesem Zusammenhang aussagekräftiger ist.int number;
Deklaration vor dem try-Block und dernumber = ...
Zuordnung.TryLoadFile(path, out file)
auslösen, wenn die Ausnahme nicht mit der direkten Aktion zusammenhängt, die wie woah außerhalb des Arbeitsspeichers ausgeführt wird. Der Anrufer würde also keine Fehler für einen schlechten Pfad oder einen verweigerten Zugriff erwarten, sondern eine Ausnahme für die verrückteren Dinge, die ebenfalls schief gehen könnten. Und dokumentieren Sie es.Onkel Bob gibt das folgende Beispiel in seinem Buch Clean Code . Wann immer wir erwarten, dass eine Ausnahme ausgelöst wird, können wir das
Try
Präfix für einen Methodennamen verwenden:Und dann (angepasst):
Die
tryToShutDown
Methode führt keine Fehlerbehandlung durch, da dies in der Verantwortung dersendShutDown
Methode liegt.Das
TryParse
Muster von Microsoft verstößt gegen die Clean Code-Richtlinie, die besagt, dass Ausgabeparameter vermieden werden sollten.Wenn wir keine neue Version von C # entwickeln, müssen wir uns nicht an alle Microsoft-Richtlinien halten. Manchmal sind sie nicht die Besten.
quelle