11 votes

Lancer NotImplementedException sur un cas par défaut dans une instruction switch

Devrais-je jeter une NotImplementedException() sur default, si j'ai des cas pour tous les types d'enum possibles?

13voto

Mike Hofer Points 6559

Si vous recherchez une valeur qui doit, par définition, correspondre à la valeur d'une énumération, et que vous avez reçu quelque chose d'autre, c'est définitivement un argument invalide.

Mais maintenant, vous devez considérer le contexte.

La méthode est-elle privée, et accessible uniquement par les membres de votre bibliothèque de classes ou de votre application ? Si c'est le cas, c'est une erreur de codage qui ne devrait JAMAIS se produire en premier lieu. Affirmer et échouer.

Si, en revanche, c'est une méthode publique ou protégée, et peut être accessible par les clients consommant votre bibliothèque, vous devriez certainement lancer une exception avec un message significatif (et de préférence un type d'exception bien connu).

Il est important de se rappeler que les énumérations ne sont pas vérifiées dans le Framework. Je peux spécifier qu'une méthode nécessite un paramètre de type Environment.SpecialFolder; mais elle acceptera n'importe quelle valeur entière sur 32 bits.

Donc, en résumé, si votre méthode est destinée à la consommation publique, oui, n'hésitez pas à lancer une exception. Si elle n'est pas destinée à la consommation publique, Affirmer.

9voto

Jakub Šturc Points 12549

Ça dépend vraiment.

  • Le NotImplementedException est quelque chose comme un marqueur de "à faire" pour moi. Cela signifie que quelqu'un viendra plus tard pour terminer le code. Cependant, je ne pense pas que ce soit le cas du cas par défaut qui ne devrait pas se produire.

  • Lorsque vous vérifiez l'état de l'objet, vous pouvez considérer InvalidOperationException. Votre méthode est conçue pour fonctionner uniquement avec les cas existants.

  • Lorsque vous discriminez sur le paramètre d'entrée, ArgumentException est toujours approprié.

  • Dans d'autres cas, je préfère NotSupportedException. Cela indique légèrement qu'il y a un problème avec la plateforme ou la version. Et les versions incompatibles du code sont la vraie source du problème quand le cas par défaut du switch qui ne devrait pas se produire se produit.

4voto

Yuriy Faktorovich Points 33347

Peut-être pas NotImplementedException, mais ArgumentException. Cela dépendrait vraiment de l'endroit où vous l'utilisez.

3voto

David Stratton Points 45298

Cela semble être une option raisonnable.

Personnellement, je créerais un nouveau type d'exception (peut-être une InvalidEnumException ou lui donner un autre nom qui aura du sens pour l'équipe de support) et la lancerai.

2voto

C. Ross Points 10641

Cela dépend vraiment du processus spécifique, mais oui, c'est un bon processus de répondre dans le cas par défaut si quelque chose n'était pas censé être là.

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