O impacto no desempenho é provavelmente insignificante, conforme explicado nesta resposta .
Então, vamos com a ideia de que o desempenho não é um problema. Você está jogando System.Exception
, apenas para mover a execução para a catch
cláusula . Jogar um BadControlFlowThatShouldBeRewrittenException
provavelmente seria um exagero.
Vamos quebrar isso. Nós temos:
- Método
GetDataFromServer
(os nomes dos métodos devem ser PascalCase em C #), o que pode gerar uma exceção ou retornar a bool
.
- Se o resultado foi
true
, execute ProcessData
.
- Retornar
null
caso contrário.
Parece que o método em que esse código está escrito está simplesmente fazendo muitas coisas. GetDataFromServer
retornando uma bool
aparência de falha de design, eu esperaria que esse método retornasse os dados obtidos do servidor , alguns IEnumerable<SomeType>
que contenham 0 ou mais itens - ou seja, o caminho feliz retorna n itens em que n> 0 , não tão feliz path retorna 0 itens e o caminho infeliz explode com uma exceção não tratada, seja o que for.
Isso muda bastante a aparência do método - novamente, é difícil dizer se isso faz sentido, porque a postagem original tem apenas um ponto de saída (e, portanto, não seria compilado, pois nem todos os caminhos de código retornam um valor ), então este é apenas um palpite:
try
{
var result = GetDataFromServer();
return ProcessData(result);
}
catch
{
return null;
}
Aqui você observaria ProcessData
e iteraria oe result
retornará null
se não houver nenhum item no IEnumerable
.
Agora, por que o método está retornando null
? O servidor estava inoperante? Existe um erro na consulta? A cadeia de conexão está usando as credenciais incorretas? Sempre que GetDataFromServer
explode com uma exceção que você não está esperando, você está engolindo, empurrando-a para debaixo do tapete e retornando um null
valor. Eu recomendo capturar exceções específicas nesse caso e registrar todo o resto; a depuração será muito mais fácil dessa maneira.
Com uma catch
cláusula geral que não captura a exceção, fica muito difícil diagnosticar qualquer coisa. Eu faria isso minimamente:
catch(Exception e)
{
return null;
}
Agora você pode pelo menos quebrar e inspecionar e
se as coisas derem errado.
TL; DR : Não, lançar e capturar exceções para controle de fluxo não é uma boa ideia.