Frage

Ich erstelle eine "gemeinsame" Bibliothek, die von anderen Teammitgliedern als Referenz in verschiedenen Lösungsprojekten verwendet wird. Die Methoden sind normalerweise void Funktionen ohne tatsächliche zurückgegebene Daten.

Ich suche nach einem Warum, um die Verwendung dieser Methoden innerhalb von a zu erzwingen, Try...Catch Block von anderen. Ich muss sicherstellen, dass Fehler ordnungsgemäß behandelt werden. Ich bin es, mich auf einen Booleschen Rückgabetyp zu verlassen, aber das ermöglicht mir nicht, die Fehlermeldung zurückzugeben. Meine einzige Option ist es, eine zu werfen Exception.

Wenn ein ordnungsgemäßes Erzwingen nicht möglich ist, wie kann ich ein Attribut erstellen, das beim Kompilieren auftaucht, um den Entwickler vor der Versuchs-/Fangerforderung zu warnen? (Art der Obsolete Attribut).

Irgendwelche anderen besseren Ansätze?

BEARBEITEN:

Hier ist mein volles Szenario:

Ich habe eine Codemethode, die einen Webdienst aufruft, um einen Wert aus der Ferne zu aktualisieren. Das Update ist ziemlich entscheidend. Die Methode, die es selbst funktioniert, aber was ist, wenn der Webdienst nicht erreichbar ist? Der Anruf gibt keinen Wert zurück.

War es hilfreich?

Lösung

Etwas in a platzieren try/catch Block macht es nicht "richtig gehandhabt" - in der Tat in der große Mehrheit Von Fällen besteht die richtige Art, eine Ausnahme zu behandeln, besteht darin, sie auf die nächste Stufe zu sprudeln. Vorbehalt: try/finally ist viel häufiger, um eine Ressourcenreinigung zu ermöglichen, aber noch häufiger als das ist using.

Sie können nicht durchsetzen "und müssen es richtig verwenden" im Code. Das ist in jeder API impliziert, und Sie werden nur Irritation und Ärger verursachen und Menschen zu unangemessenen und nicht hilfreichen Codierungsstilen zwingen, während Sie Ihnen eine geben völlig künstlich und falsch Sinn, dass der Code korrekt ist.

Wenn Sie sicher sein möchten, dass der Code korrekt funktioniert: Testen Sie ihn.

Es gibt keine Attribute, die Sie für dieses Szenario verwenden können. Sie können wahrscheinlich eine FXCOP -Regel oder ähnliches erstellen, aber aus den obigen Gründen: Ich empfehle sie nicht.

Andere Tipps

Ich würde das eigentlich nicht tun, aber als eine unterhaltsame Lösung für das angegebene Problem können Sie Ihren eigenen Ausnahmetyp erstellen: eine SuccessException. Dann werfen Sie diese Ausnahme am Ende Ihrer Methode, um den Erfolg anzuzeigen. Dies macht die Methode ohne irgendeine Form von Try/Fang so unbrauchbar. Aber wieder: Tu das nicht.

Sie können eine benutzerdefinierte Ergebnisklasse zurückgeben:

public class Result
{
    public bool Okay { get; set; }
    public string Error { get; set; }
}

Dann:

var result = AttemptSomething();

if (!result.Okay)
{
    Console.WriteLine(result.Error);
}

Oder vielleicht zurückkehren string:

var error = AttemptSomething();

if (!String.IsNullOrEmpty(error))
{
    Console.WriteLine(error);
}

Oder den Fehler als Out haben:

string error;
if (!AttemptSomething(out error))
{
    Console.WriteLine(error);
}

Oder zurückkehren Exception aber nicht Wurf.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top