El impacto en el rendimiento es probablemente insignificante, como se explica en esta respuesta .
Así que vamos con la idea de que el rendimiento no es un problema. Estás lanzando System.Exception
, solo para mover la ejecución a la catch
cláusula . BadControlFlowThatShouldBeRewrittenException
Sin embargo, arrojar un probablemente sería exagerado.
Analicemos esto. Tenemos:
- Método
GetDataFromServer
(los nombres de los métodos deben ser PascalCase en C #), que posiblemente puede generar una excepción o devolver a bool
.
- Si el resultado fue
true
, corre ProcessData
.
- Regrese de
null
otra manera.
Parece que el método donde se escribe este código es simplemente hacer demasiadas cosas. GetDataFromServer
devolver un bool
aspecto parece un defecto de diseño, esperaría que ese método devuelva los datos que está obteniendo del servidor , algunos IEnumerable<SomeType>
que contendrían 0 o más elementos, es decir, la ruta feliz devuelve n elementos donde n> 0 , no tan feliz ruta devuelve 0 elementos, y la ruta infeliz explota con una excepción no controlada, sea lo que sea.
Eso cambia bastante el aspecto del método; de nuevo, es difícil saber si esto tiene sentido, porque la publicación original solo tiene un punto de salida (y, por lo tanto, no se compilaría, ya que no todas las rutas de código devuelven un valor ), por lo que esto es solo una suposición descabellada:
try
{
var result = GetDataFromServer();
return ProcessData(result);
}
catch
{
return null;
}
Aquí mirarías ProcessData
y verías que está iterando result
y devuelve null
si no hay ningún elemento en el IEnumerable
.
Ahora, ¿por qué regresa el método null
? El servidor estaba caído? ¿Hay algún error en la consulta? ¿La cadena de conexión está usando las credenciales incorrectas? Cada vez que GetDataFromServer
explota con una excepción que no espera, lo está tragando, metiéndolo debajo de la alfombra y devolviendo un null
valor. Recomiendo capturar excepciones específicas en este caso, y registrar todo lo demás; la depuración será mucho más fácil de esa manera.
Con una catch
cláusula general que no captura la excepción, se hace bastante difícil diagnosticar algo. Mínimamente haría esto en su lugar:
catch(Exception e)
{
return null;
}
Ahora al menos puede romper e inspeccionar e
si las cosas salen mal.
TL; DR : No, lanzar y capturar excepciones para el control de flujo no es una buena idea.