Beh, catch(Exception ex)
è proprio la stessa catch(Exception)
con una differenza solo: in catch(Exception ex)
abbiamo un accesso alla classe di eccezione (errore di causa) esempio. Di solito è necessario un'istanza classe di eccezione per stampare la messaggio originale:
try {
...
}
catch (AppServerException e) {
Console.WriteLine("Application server failed to get data with the message:");
Console.WriteLine(e.Message); // <- What's actually got wrong with it
}
Se non è necessario l'istanza di classe di eccezioni, per esempio si prevede solo per consumare l'eccezione , la sintassi catch (Exception ex) è eccessivo e catch (Exception) è prefferable:
try {
c = a/b;
}
catch (DivideByZeroException) {
c = Int.MaxValue; // <- in case b = 0, let c be the maximum possible int
}
Infine. non prendere classe generale Exception senza ri-throughing:
try {
int c = a/b;
}
catch (Exception) { // <- Never ever do this!
Console.WriteLine("Oh NO!!");
}
vuoi veramente codificare "qualunque errore (fumi verde dalla CPU incluso) avevano gionro basta stampare fuori 'Oh No' e continua"? Il modello con classe Exception è qualcosa di simile:
tran.Start();
try {
...
tran.Commit();
}
catch (Exception) {
// Whatever had happened, let's first rollback the database transaction
tran.Rollback();
Console.WriteLine("Oh NO!");
throw; // <- re-throw the exception
}
fonte
2013-08-11 16:16:14
Se non siete interessati a quello che stai recuperando eccezione (info sullo stack, il messaggio ecc) si può scrivere semplicemente 'catch {Console.WriteLine (" Oh No ");} – Steve
La differenza è che avrai * qualche * idea del perché il tuo programma smette di funzionare correttamente nel 1 ° frammento. Nessuna in alcun modo nel secondo frammento. Il secondo modo è ciò che rende gli utenti SO porre domande come "non funziona, c'è stato un errore". Basta non scrivere codice come questo. –
@Steve C'è una piccola differenza tra 'catch' e' catch (Exception) '. Il primo catturerà tutti gli oggetti di eccezione, il secondo catturerà solo gli oggetti di eccezione derivanti da "Eccezione". In C# puoi lanciare solo oggetti derivanti da 'Exception', ma il CLR supporta di più. – user1908061