Il colpo di scena è probabilmente trascurabile, come spiegato in questa risposta .
Quindi andiamo con l'idea che le prestazioni non siano un problema. Stai lanciando System.Exception, solo per spostare l'esecuzione nella catchclausola . Lanciare a BadControlFlowThatShouldBeRewrittenExceptionsarebbe probabilmente eccessivo.
Analizziamo questo. Abbiamo:
- Metodo
GetDataFromServer(i nomi dei metodi devono essere PascalCase in C #), che può eventualmente generare un'eccezione o restituire a bool.
- Se il risultato è stato
true, esegui ProcessData.
- Ritorna
nullaltrimenti.
Sembra che il metodo in cui è scritto questo codice, stia semplicemente facendo troppe cose. GetDataFromServerrestituendo un boolaspetto simile a un difetto di progettazione, mi aspetterei che quel metodo restituisca i dati che sta ricevendo dal server , alcuni IEnumerable<SomeType>che conterrebbero 0 o più elementi - vale a dire il percorso felice restituisce n elementi in cui n> 0 , non così felice path restituisce 0 elementi e il percorso infelice esplode con un'eccezione non gestita, qualunque essa sia.
Ciò cambia l'aspetto del metodo, abbastanza - ancora una volta è difficile capire se questo ha senso, perché il post originale ha solo un punto di uscita (e quindi non si compila, poiché non tutti i percorsi di codice restituiscono un valore ), quindi questa è solo un'ipotesi selvaggia:
try
{
var result = GetDataFromServer();
return ProcessData(result);
}
catch
{
return null;
}
Qui guarderesti ProcessDatae vedresti che sta iterando il result, e ritorna nullse non ci sono elementi nel IEnumerable.
Ora, perché il metodo sta tornando null? Server inattivo? C'è un bug nella query? La stringa di connessione utilizza credenziali errate? Ogni volta che GetDataFromServeresplode con un'eccezione che non ti aspetti, lo stai ingoiando, spingendolo sotto il tappeto e restituendo un nullvalore. In questo caso, consiglierei di cogliere eccezioni specifiche e di registrare tutto il resto; il debug sarà molto più semplice in questo modo.
Con una catchclausola generale che non cattura l'eccezione, diventa abbastanza difficile diagnosticare qualsiasi cosa. Invece lo farei minimamente:
catch(Exception e)
{
return null;
}
Ora puoi almeno rompere e ispezionare ese le cose vanno male.
TL; DR : No, lanciare e catturare le eccezioni per il controllo del flusso non è una buona idea.