Devrais-je jeter une NotImplementedException()
sur default
, si j'ai des cas pour tous les types d'enum possibles?
Réponses
Trop de publicités?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.
Ç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.
- Réponses précédentes
- Plus de réponses