"TryParse / Parse like" -Muster: Was ist der beste Weg, um es zu implementieren

Diese Frage ist eine Fortsetzung vonWie man anzeigt, dass eine Methode nicht erfolgreich war. Das Muster xxx () Tryxxx () kann in vielen Bibliotheken sehr nützlich sein. Ich frage mich, wie ich beide Implementierungen am besten anbieten kann, ohne meinen Code zu duplizieren.

Was ist das beste:

public int DoSomething(string a)
{
     // might throw an exception
}
public bool TrySomething(string a, out result)
{
    try
    {
        result = DoSomething(a)
        return true;
    }
    catch (Exception)
    {
        return false;
    }

oder

public int DoSomething(string a)
{
     int result;
     if (TrySomething(a, out result))
     {
         return result;
     }
     else
     {
         throw Exception(); // which exception?
     }
}
public bool TrySomething(string a, out result)
{
    //...
}

Ich würde instinktiv annehmen, dass das erste Beispiel korrekter ist (Sie wissen genau, welche Ausnahme aufgetreten ist), aber könnte der Versuch / Fang nicht zu teuer sein? Gibt es eine Möglichkeit, die Ausnahme im zweiten Beispiel abzufangen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage