Parfois, le type d'exception est suffisamment unique pour indiquer le problème exact, tel qu'une ArgumentOntOfrangeException i>. D'autres fois, l'exception est plus générale et pourrait être lancée pour plusieurs raisons. Dans ce scénario, il semble que les seules informations supplémentaires se trouvent dans la propriété Message d'exception.
Dans ma situation actuelle, je reçois une communicationException qui jette le message d'erreur: p>
Le message maximum Le quota de taille pour les messages entrants (65536) a été dépassé strong> p> car plusieurs erreurs différentes peuvent être lancées via la communicationException, est-elle une mauvaise pratique d'utiliser la propriété Message pour déterminer la cause, comme suit: P> catch (CommunicationException ex)
{
if (Regex.IsMatch(ex.Message, "The maximum message size quota for incoming messages .* has been exceeded"))
{
// handle thrown exception
}
throw;
}
5 Réponses :
"Est-ce une mauvaise pratique d'utiliser la propriété Message pour déterminer la cause" p>
oui p>
oui. p>
Normalement le type de classe d'exception (et peut-être une propriété à ce sujet si la classe d'exception personnalisée) devrait être ce que vous vérifiez. p>
Si vous traitez avec un cadre ou tout ce qui est mal écrit et que vous n'avez pas d'autre moyen d'être sûr (rien dans la propriété de données ou une exception innovante ou quoi que ce soit), c'est mauvais, mais vous devez. P>
Solutions String IMHO Magic devrait toujours être un dernier recours. P>
Êtes-vous sûr de ne pas pouvoir résoudre le type de l'erreur à partir des propriétés supplémentaires de l'objet de communicationException: p>
http://msdn.microsoft.com/fr -us / bibliothèque / system.servicemodel.communicationException.aspx p>
.. ou avez-vous une exception Innère qui est plus utile? P>
En réponse à la dernière question, de nombreux messages d'exception .NET sont localisés. Donc, vous pourriez rencontrer des problèmes si ce logiciel sera déployé largement. Consultez la question suivante pour une solution de contournement possible pour cela: p>
Réponse courte: oui. C'est pourquoi ils ont des classes différentes pour distinguer différentes erreurs. Si vous vouliez faire quelque chose comme celui-ci avec une frappe forte, vous pourrez peut-être utiliser un champ Enum pour le faire. P>
Dans la plupart des cas, vous devriez pouvoir utiliser le type de classe d'exception ou une propriété de la classe (comme .Errorcode sur certains types d'exception), mais si cela n'est pas possible, l'utilisation de la version .Message peut être la seule façon. . P>
+1 J'aime cette réponse. Il y a toujours quelque chose d'inattendu lors de la programmation.