Dictionnaire des Valeurs Enum comme des chaînes de caractères
Je suis en train de faire une API, une fonction dans l'API prend Enum en tant que paramètre correspond à une chaîne de caractères qui est utilisé.
public enum PackageUnitOfMeasurement
{
LBS,
KGS,
};
La méthode triviale ce code aura à la liste de tous les cas dans le code. Mais comme ils sont 30 cas, alors j'essaie d'éviter cela et utiliser Dictionary Data Structure
, mais je n'arrive pas à relier les points sur comment vais-je relier la valeur de l'enum.
if(unit == PackageUnitOfMeasurement.LBS)
uom.Code = "02"; //Please note this value has to be string
else if (unit == PackageUnitOfMeasurement.KGS)
uom.Code = "03";
Please note this value has to be string
- mais toutes les valeurs de chaîne de chaîne de représentations de nombres entiers, et distinctes des entiers? Si oui, vous devez définir le nombre entier qui sous-tendent chaque valeur d'enum, et puis écrire une fonction pour convertir correctement les entiers à la représentation de chaîne que vous voulez par exemple 2=> "02", etc.+1 N'est venu à travers un exemple de code pour le réglage des valeurs enum dans le code et c'est surement plus simple, mais dans mon cas, la valeur peut également être "2a"
Juste assez. Bang va à la solution la plus simple!
OriginalL'auteur PUG | 2012-03-08
Vous devez vous connecter pour publier un commentaire.
Ici est une façon, vous pouvez stocker la cartographie dans un dictionnaire et récupérer des valeurs plus tard:
Une autre option est d'utiliser quelque chose comme le
DecriptionAttribute
pour décorer chaque élément de l'énumération et de l'utilisation de la réflexion à la lecture de ces, comme indiqué dans Obtenir les attributs de la valeur de l'Enum:L'avantage de la deuxième méthode est que vous gardez la cartographie à proximité de l'enum et si l'une des modifications, vous n'avez pas besoin de chasser pour n'importe quel autre endroit où vous avez besoin de mettre à jour.
OriginalL'auteur Oded
Vous pouvez spécifier le nombre de la valeur de l'enum éléments
Alors vous pouvez simplement convertir les unités avec
REMARQUE:
La question fondamentale est de savoir si c'est une bonne idée de coder en dur les unités. Habituellement, ce genre de choses devraient être placés dans une table dans une base de données, ce qui rend facile d'ajouter de nouvelles unités à tout moment sans avoir à modifier le code du programme.
Mise à JOUR:
J'ai ajouté un exemple contenant un code HEXADÉCIMAL. Le format "X2" les rendements à deux chiffres de la valeur hex. Entrez tous les nombres supérieurs à 9 en hexadécimal comme
0xA == 10
,0x10 == 16
en c#.S'appuyant sur l'exemple il n'y a pas de raison de croire qu'elle ne contiennent pas toujours des nombres entiers.
Acutally ressemble à l'OP a maintenant ajouté que "2a" est une valeur acceptable. (bien que je suppose que vous pourriez utiliser hex!)
OriginalL'auteur Olivier Jacot-Descombes
Je voudrais utiliser les attributs attachés à l'enum. Comme ceci:
Ceci est pris à partir de cette question, Obtenir les attributs de la valeur de l'Enum. Qui demande spécifiquement sur le retour Enum attributs.
OriginalL'auteur Ben Hoffman
Oded la solution est bien, mais un autre que j'ai utilisé dans le passé, c'est d'utiliser des attributs attachés aux valeurs enum qui contiennent la chaîne correspondante.
Voici ce que j'ai fait.
Ensuite, j'ai pu définir mon enum comme ceci:
Et, pour ma part, j'ai créé un convertisseur de sorte que je pouvais lier à l'enum:
Oded la solution probablement effectue plus rapidement, mais cette solution a beaucoup de flexibilité. Vous pouvez ajouter tout un tas d'attributs si vous avez vraiment voulu. Cependant, si vous l'avez fait, vous seriez probablement mieux de la création d'une classe plutôt que d'utiliser un enum!
Voir ma réponse. Il explique quoi faire.
J'ai creusé mon code et l'a ajouté. Espérons que cela aide.
OriginalL'auteur Matt Burland
La valeur par défaut de
PackageUnitOfMeasurement.LBS
est 0 de mêmePackageUnitOfMeasurement.KBS
est 1.Donc une collection de
PackageUnitOfMeasurement
est vraiment une collection qui contiennent des valeurs entières ( c'est à direint
).Votre question n'est pas entièrement clair....
Un Dictionnaire de la collection a un
Key
et unValue
il semble que vous voulez utiliser PackageUnitOfMeasurement a unKey
qui est trivial que la coulée de la valeur d'un entier.OriginalL'auteur Security Hound