8
votes

Nullable Enum ou un élément supplémentaire

Considérez l'énum suivant et un champ NULLABLABLABLE CORRPONDING de ce type

enum PossibleOptions { Unspecified, One, Two }

PossibleOptions option;


0 commentaires

5 Réponses :


14
votes

Je sais que vous posez des questions sur des raisons en faveur de Nullable Enums, mais personnellement, je ne vois aucune raison de les utiliser.

Un énumé qui a un membre "invalide" est à mon avis beaucoup plus lisible et transmet une signification beaucoup plus qu'une nullable.


1 commentaires

Généralement, les énumes sont utilisées pour transmettre une signification. Nullable indique l'absence de toute valeur et plus utile si l'énumé provient d'une base de données. Même dans ce cas, une énumération spéciale comme "non spécifiée" est une meilleure option.



11
votes

Selon le Documentation :

Le type sous-jacent par défaut de la Les éléments d'énumération sont int. Par Par défaut, le premier énumérateur a le valeur 0, et la valeur de chaque L'énumérateur successif est augmenté par 1.

...

la valeur par défaut d'un énorme e est le valeur produite par l'expression (e) 0.

Il est également possible de modifier cette valeur par défaut: xxx

dans ce cas non spécifié ne sera plus la valeur par défaut .

Le seul avantage possible que je peux voir d'utiliser une nullable Enum est que la valeur null ne dépendra pas de la définition de l'énumération.

À mon avis, vous devez décider lequel à utiliser selon que vous avez besoin de la sémantique de la valeur valeur par défaut ou valeur non assignée . < / p>


1 commentaires

Pourriez-vous fournir un bon exemple de lorsque la valeur par défaut est préférée et une lorsque la valeur non attribuée est préférée?



0
votes

La seule raison (en plus de la préférence personnelle) d'utiliser une nullable Enum est si vous l'utilisez à la fois avec et sans étant nullable.

En utilisant une nullable Enum, vous n'avez pas la valeur null comme l'une des valeurs. Vous pouvez obtenir la valeur de la propriété nullable et l'utiliser ailleurs où la valeur null ne devrait pas être une valeur possible.


0 commentaires

1
votes

Je choisirais la valeur supplémentaire "non spécifiée" de l'énum. Avec une valeur nullable, vous prenez l'hypothèse que cela se produirait à un autre développeur pour passer NULL. Avec une gamme complète de valeurs, il n'y a aucune hypothèse à faire - chaque option possible est claire dans ce jeu de valeur.


0 commentaires

1
votes

Ajout à ce qui a été dit, je dirais que les énigmes nullables de performance-sage sont également pires, car ils entraînent plus d'allocations de mémoire.

Un code apparemment innocent comme celui-ci: P>

doSomething(new PossibleOptions?(PossibleOptions.One));
doSomething(new PossibleOptions?());


0 commentaires