Шаблон «TryParse / Parse like»: как лучше всего его реализовать

Этот вопрос является продолжениемКак указать, что метод был неудачным, Шаблон xxx () Tryxxx () может быть очень полезен во многих библиотеках. Мне интересно, как лучше предложить обе реализации без дублирования моего кода.

Что лучше:

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;
    }

или же

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)
{
    //...
}

Я бы инстинктивно предположил, что первый пример более правильный (вы точно знаете, какое исключение произошло), но не может ли попытка / отловить быть слишком дорогой? Есть ли способ отловить исключение во втором примере?

Ответы на вопрос(4)

Ваш ответ на вопрос