Comment puis-je créer un enum à l'aide de nombres?
Est-il possible de faire une énumération en utilisant seulement des chiffres en C#? Dans mon programme j'ai une variable, le Gain, qui ne peut être réglé à 1, 2, 4 et 8. Je suis l'aide d'une grille des propriétés de contrôle à afficher et de définir cette valeur. Si je devais créer un enum comme ça...
private enum GainValues {One, Two, Four, Eight}
et j'ai fait mon gain variable de type GainValues ensuite la liste déroulante dans la grille des propriétés ne ferait que montrer les valeurs disponibles pour le gain variable. Le problème c'est que je veux les valeurs de gain pour lire numériquement un pas que des mots. Mais je ne peux pas créer un enum comme ceci:
private enum GainValues {1,2,4,8}
Donc, il y a une autre manière de faire? Peut-être la création d'un type personnalisé?
OriginalL'auteur PICyourBrain | 2010-06-01
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas la façon dont
enums
travail. Une énumération de vous permettre de vous nom une valeur spécifique de sorte que vous pouvez consulter dans votre code avec plus de discernement.Si vous souhaitez limiter le domaine du numérique valide, les énumérations peuvent ne pas être le bon choix. Une autre possibilité est de créer une collection de valeurs valides qui peut être utilisé comme gains:
Si vous voulez le rendre plus typesafe, vous pourriez même créer un type personnalisé avec un constructeur privé, de définir toutes les valeurs valides comme statique, instances publiques, et de les exposer de cette façon. Mais vous allez encore avoir à donner à chaque valeur d'un nom - depuis en C# de membres/les noms de variable ne peut pas commencer par un nombre (bien qu'ils contiennent).
Maintenant, si ce que vous voulez vraiment, est d'assigner des valeurs à des entrées dans un GainValues énumération, que vous POUVEZ faire:
Cat: Oui, bon point sur la statique/readonly, bien que dans la pratique, vous auriez besoin d'être une collection comme List<int> plutôt que de faire un tableau à vraiment appliquer l'immuabilité.
OriginalL'auteur LBushkin
Il y a eu une bonne quantité de réponses sur ce déjà cependant, je vous offre une autre solution. Si vous voulez que votre contrôle pour afficher un nombre réel plutôt que le mot anglais pour le numéro de contrôle vous pouvez utiliser les annotations de données.
C'est utile n'importe où dans votre programme, si vous souhaitez utiliser un nom convivial, par opposition à un membre du nom.
OriginalL'auteur Adrian
Si j'ai bien compris l'original correctement à la question, la réponse peut être:
Vous pouvez obtenir les numéros répertoriés dans un enum dans l'inspecteur en utilisant simplement un trait de soulignement préfixe e.g:
Espérons que cette aide!
OriginalL'auteur lifeboatDave
devrait fonctionner.
Mise à jour: OK, je pense que j'ai mal compris.
Vous pourriez peut-être utiliser un
KeyValuePair<string, int>
puis lier le nom et la valeur de la Clé et la Valeur de la propriété, respectivement.compte tenu de la description, c'est probablement ce que l'OP veut.
Je ne suis pas si sûr, l'OP écrit:
The problem is I want the gain values to read numerically an not as words.
Mon interprétation est que l'OP veut une liste limitée de valeurs valides pour les gains, plutôt qu'un nom de l'énumération.À droite, la grille de propriété s'applique les méthodes ToString(). Peut-être l'attribut de Description peut aider, je ne suis pas sûr: blogs.msdn.com/b/paulwhit/archive/2008/03/31/...
fondamentalement, je veux la liste déroulante dans la grille des propriétés pour afficher uniquement les 1, 2, 4 et 8 que les options pour le gain.
OriginalL'auteur corvuscorax
Malheureusement, les symboles en C# peuvent contenir des chiffres, mais ne peut pas commencer avec des nombres. Donc, vous allez avoir à utiliser des mots.
Alternativement, vous pourriez faire Gain1, Gain2, etc.
Ou vous pourriez renoncer à un enum complètement et utiliser des constantes et de traitement interne.
OriginalL'auteur Randolpho
l'utilisation explicite de l'affectation de la valeur de l'enum:
Alors à énumérer ces valeurs, procédez comme suit:
Ensuite, vous pouvez lancer/ints que nécessaire:
OriginalL'auteur Mike Marshall