10
votes

Enum vs constantes / classe avec des membres statiques?

J'ai un ensemble de codes particuliers à l'application (une mappage de la cartographie du code à son nom), et j'utilise Enums en C # pour les représenter. Je ne suis pas sûr maintenant si cela est même nécessaire. Les valeurs ne changent jamais et ils vont toujours être associés à ces étiquettes:

Workflow_Status_Complete = 1
Workflow_Status_Stalled = 2
Workflow_Status_Progress = 3
Workflow_Status_Complete = 4
Workflow_Status_Fail = 5


0 commentaires

4 Réponses :


11
votes

Les membres statiques du type INT semble être inférieur à un énorme pour moi. Vous perdez les types de l'énumé. Et lorsque vous déboguez, vous ne voyez pas le nom symbolique, mais un numéro.

D'autre part si une entrée consiste en plus qu'un simple nom / integervalue, une classe peut être une bonne idée. Mais ensuite, les champs devraient être de cette classe et non int. Quelque chose comme: xxx


4 commentaires

+1; Sans utiliser Enums, vous perdez également la capacité de énumérer de manière programmable les valeurs via Enum.getvalues ​​ et Enum.getNames . Cela peut souvent être utile lors de la remplissage d'une boîte déroulante, etc.


L'ajout de ces fonctionnalités de dénombrement à votre classe n'est pas difficile en fonction des champs statiques de recto-reflet.


Bien sûr que ce n'est pas difficile. Le point est avec un énumé, vous n'avez même pas avoir pour les ajouter. (Il est également moins sûr que vous assumez les valeurs individuelles basées sur la convention de dénomination, vraisemblablement)


J'ai également trouvé que les membres statiques peuvent être de votre propre type et que l'on peut avoir des chaînes localisées, qui sont très importantes pour de nombreux scénarios (E.J. Filling Consignes ou listes).



1
votes

Consultez le modèle d'état car c'est une meilleure conception. Avec l'idée que vous utilisez, vous vous retrouverez avec une importante déclaration de commutation / if-else qui peut être très difficile à suivre.


0 commentaires

2
votes

Utilisez un énumé. Même si vos codes ne changent jamais, il sera difficile de savoir quelle est la valeur qui ne représente que par l'inspection. L'un des nombreux points forts de l'utilisation des énums. xxx

pas même le débogueur vous aidera beaucoup ici, surtout s'il existe de nombreuses valeurs différentes.


1 commentaires

Vous pouvez utiliser un type propre avec des propriétés ID / Valeur / Description au lieu de UINT. De plus, vous pouvez remplacer la totring () ou même utiliser le système.diagnostics.debuggerdisplay pour personnaliser la manière dont le type sera affiché.



0
votes

Je me pencherais vers Enums alors qu'ils fournissent plus d'informations et que vos codes sont plus faciles à utiliser correctement et difficiles à utiliser de manière incorrecte ». (Je pense que la citation provient du programmeur pragmatique.


0 commentaires