J'ai remarqué que je l'ai fait de manière incohérente dans le même projet. À certains endroits, j'aurai une énumération avec une option de toutes toutes, et dans d'autres, j'aurai mon énuméro comme un type nullable avec une valeur null indiquant tout (ou aucun filtre.) P>
Je l'ai remarqué quand je devais écrire quelque chose comme Y a-t-il une raison d'aller d'une manière ou d'une autre? p> si (région! = null && région! = régions.all) code>. p>.
3 Réponses :
Utilisation de régions.All CODE> est plus explicite en ce qui concerne la transmission de la signification. Vous pouvez "attribuer" ce sens à
null code> et l'ordinateur irait bien avec elle. Les lecteurs em> de votre programme devraient toutefois être décéchés de sorte que la signification de la façon dont vous utilisez la valeur code> null code> Enum ou de lire vos commentaires.
régions.all code>, d'autre part, est auto-documentant et auto-explicite. p>
où enums que vous devez spécifier soit un type "Tous" ou "NULL", je vais habituellement avec l'attribut comme pour faire un type nullable ou avoir une option soit "tout", je pense que si cela a du sens pour vous, alors je ne vois aucun problème avec ça. Je préfère simplement utiliser des drapeaux. P> drapeau Utiliser bitwise
& code> et
et
et
et
et
et
| code>. C'est une solution beaucoup plus flexible. P>
Un membre Tout code> est utile pour
[indicateurs] code> Enums aussi ... Il n'y a aucune règle que tous les drapeaux doivent être mutuellement exclusifs.
@Benvoigt - totalement. Lorsque j'ai ces types de combinaisons fréquentes, je ferai un tout = 0x111 code> ou autre. Vous pouvez également faire quelque chose comme
pizzaandbreadsticks = 0x101 code> s'il s'agit d'un combo fréquent que vous souhaitez une définition explicite pour.
Généralement, nous utilisons De plus, un énumé appelé null code> pour signifier "non spécifié" ou "inexistant" ou "non applicable". Donc, dans le cas d'un filtre, il est logique de permettre à NULL, car cela signifie «pas de filtrage». p>
régions code> a probablement des valeurs telles que
nord-est code>,
sud-est code>,
midwest code>,
Southwest code> et
West code>. Maintenant, veuillez me corriger si je me trompe, mais je ne pense pas qu'il y ait une région intitulée "All" aux États-Unis. Au cours de mon séjour de plusieurs ans, j'ai entendu le météorologue sur la télévision parlant de la météo à l'ouest et de la météo dans le sud-est, etc. mais jamais de la météo à un endroit appelé "tout". Donc, je suis enclin à croire qu'il n'y a pas de telles régions. Par conséquent, y compris «tous» dans une énumération de régions est un hack. Soudainement, les régions
code> Enum ne concerne pas les régions; Au lieu de cela, il s'agit de régions et / ou de filtrage de celui-ci. Les changements de ce type sont au courant de la programmation et d'éviter généralement. P>
Je ne suis pas d'accord avec toujours affectant NULL à une variable Enum. Il ne faut rien pour créer une valeur de Aucun code> ou
tout code> qui décrit parfaitement ce que
null code> signifie réellement dans ce contexte.
@ Hand-e-Food Oui, bien sûr, il ne prend rien. Et ensuite, vous avez une liste des objets «dirigeants régionaux» chacun d'un domaine «région», et il est parfaitement valable d'avoir un gestionnaire régional qui gère une région appelée «aucune» ou une région appelée «aucune». Félicitations, vous venez de violer un principe fondamental de l'intégrité des données.
Je vois votre point maintenant que l'ajout de membres indiscret à ce qui devrait être une énumération discrète est incompatible. Quelque chose ne reste pas assis avec moi en utilisant null code>, mais ça me fait penser.
@ E-WOOD WOOD bien, certaines alternatives que je peux penser, ce serait: 1) Un autre Enum code> appelé
REGIONSTOSEARCHFOR code> quels miroirs
et ajoute
tout code> à la fin, ou 2) A
struct code> contenant une région
et un indicateur indiquant s'il faut filtrer par cette région ou l'ignorer. Tu pensais que Null était mauvais? Essayez-en un! Peut-être que maintenant l'approche nulle ne sonne pas si mal après tout.
Les noms d'enum doivent être supérieurs en maquillage
J'ai l'impression que c'est une question d'inadéquation d'impédance d'objet relationnelle. Dans le côté de l'application, il est logique d'avoir des options telles que "toutes" "toutes les régions de la côte ouest" et "toutes les régions de la côte est". Cependant, je suis souvent en train d'utiliser l'énumé sur Int directement comme un sqlparameter. Dans ces méthodes, je devrais vérifier pour chacune de ces instances et les convertir en sql approprié. (Au lieu de "et de la région = 1" J'aurais besoin de "et de la région (2, 4, 5)"). Malheureusement, les SQLParameterers ne fonctionnent pas non plus avec des listes.