65 votes

Utiliser catch sans arguments

Quelle est la différence entre:

 catch
{
    MessageBox.Show("Error.");
}

et:

 catch (Exception ex)
{
    MessageBox.Show("Error.");
    //we never use ex, so is it better to use catch without arguments?
}

9voto

Iesvs Points 65

Je pense qu'ils sont les mêmes. Mais le deuxième cas a déclenché un avertissement du compilateur car vous déclarez une exception que vous n'avez pas utilisée. J'aime bien le premier parce que vous dites explicitement que vous n'utilisez pas l'exception. Il y a aussi un troisième

 catch (Exception)
{
    //do something
}

si vous souhaitez spécifier le type d'exception mais ne vous souciez pas de l'exception elle-même.

3voto

jlafay Points 4670

Dans votre deuxième exemple, vous pouvez référencer des données d'exception, telles que la trace de la pile, la source, etc. Cela donne également un message général qui est parfois utile. Il vous indique POURQUOI vous avez subi une exception, ce qui est important lors du débogage.

0voto

IlPADlI Points 21

Certaines exceptions ne peuvent pas être catch(Exception) interceptées.

En dessous de l'exception en mono sur linux, devrait attraper sans paramètre.

Sinon, l'exécution ignorera l'instruction catch(Exception)

 System.Reflection.ReflectionTypeLoadException: The classes in the module cannot be loaded.

Si vous rencontrez ce problème, essayez de supprimer le paramètre de l' catch , enregistrez les variables de contexte pour connaître la cause de l'erreur.

PS Je ne sais pas comment sur Windows, le programme exécuté dans Windows est normal.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X