Wzór „TryParse / Parse like”: jaki jest najlepszy sposób jego wdrożenia
To pytanie jest kontynuacjąJak wskazać, że metoda zakończyła się niepowodzeniem. Wzór xxx () Tryxxx () jest bardzo przydatny w wielu bibliotekach. Zastanawiam się, jaki jest najlepszy sposób oferowania obu implementacji bez duplikowania mojego kodu.
Co jest najlepsze:
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;
}
lub
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)
{
//...
}
Instynktownie zakładam, że pierwszy przykład jest bardziej poprawny (wiesz dokładnie, który wyjątek się wydarzył), ale czy try / catch nie był zbyt drogi? Czy istnieje sposób na złapanie wyjątku w drugim przykładzie?