Padrão "TryParse / Parse like": qual é a melhor maneira de implementá-lo
Esta questão é um follow-up deComo indicar que um método não teve êxito. O padrão xxx () Tryxxx () é algo que pode ser muito útil em muitas bibliotecas. Eu estou querendo saber qual é a melhor maneira de oferecer ambas as implementações sem duplicar meu código.
O que e melhor:
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;
}
ou
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)
{
//...
}
Eu instintivamente presumo que o primeiro exemplo é mais correto (você sabe exatamente qual exceção aconteceu), mas o try / catch não poderia ser muito caro? Existe uma maneira de capturar a exceção no segundo exemplo?