J'essaie de définir Enum
et d'ajouter des séparateurs communs valides qui sont utilisés dans des fichiers CSV ou similaires. Alors je vais le lier à unComboBox
tant que source de données, donc chaque fois que j'ajoute ou supprime de la définition Enum, je n'aurais pas besoin de changer quoi que ce soit dans la zone de liste déroulante.
Le problème est de savoir comment définir enum avec une représentation sous forme de chaîne, quelque chose comme:
public enum SeparatorChars{Comma = ",", Tab = "\t", Space = " "}
Réponses:
Vous ne pouvez pas - les valeurs d'énumération doivent être des valeurs intégrales. Vous pouvez utiliser des attributs pour associer une valeur de chaîne à chaque valeur d'énumération, ou dans ce cas, si chaque séparateur est un seul caractère, vous pouvez simplement utiliser la
char
valeur:(EDIT: Juste pour clarifier, vous ne pouvez pas définir
char
le type sous-jacent de l'énumération, mais vous pouvez utiliser deschar
constantes pour affecter la valeur intégrale correspondant à chaque valeur d'énumération. Le type sous-jacent de l'énumération ci-dessus estint
.)Ensuite, une méthode d'extension si vous en avez besoin:
la source
Autant que je sache, vous ne serez pas autorisé à attribuer des valeurs de chaîne à enum. Ce que vous pouvez faire est de créer une classe avec des constantes de chaîne.
la source
separator
s'agit maintenant d'une chaîne (peut être n'importe quoi) au lieu d'unSeparator
type avec des valeurs valides restreintes.Vous pouvez y parvenir mais cela nécessitera un peu de travail.
Référez-vous: Enum avec des valeurs de chaîne en C #
la source
Pour une simple énumération de valeurs de chaîne (ou tout autre type):
Usage:
string MyValue = MyEnumClass.MyValue1;
la source
Vous ne pouvez pas faire cela avec des énumérations, mais vous pouvez le faire comme ça:
la source
comboBox.DataSource = Enum.GetValues(typeof(myEnum));
dans ce cas?switch-case
blocs. Les champs doivent êtreconst
en ordre. Mais cela ne peut toujours pas être aidé si vous le souhaitezEnum.GetValues(typeof(myEnum))
.const
place destatic
. Les constantes sont en lecture seule ainsi que statiques et ne sont pas attribuables dans les constructeurs (sauf dans les champs en lecture seule).Vous ne pouvez pas, car enum ne peut être basé que sur un type numérique primitif. Vous pouvez essayer d'utiliser un à la
Dictionary
place:Alternativement, vous pouvez utiliser un
Dictionary<Separator, char>
ouDictionary<Separator, string>
whereSeparator
est une énumération normale:ce qui serait un peu plus agréable que de manipuler directement les cordes.
la source
Une classe qui émule le comportement d'énumération mais en utilisant
string
au lieu deint
peut être créée comme suit ...Usage...
puis...
la source
GrainType myGrain = "GT_CORN"
, par exemple.Il est un peu tard pour la réponse, mais peut-être que cela aidera quelqu'un à l'avenir. J'ai trouvé plus facile d'utiliser struct pour ce genre de problème.
L'exemple suivant est une partie copiée à partir du code MS:
la source
Il est peut-être trop tard, mais c'est parti.
Nous pouvons utiliser l'attribut EnumMember pour gérer les valeurs Enum.
De cette façon, la valeur de résultat pour EUnitOfMeasure sera KM ou MI. Cela peut également être vu dans la réponse d' Andrew Whitaker .
la source
Pour les personnes arrivant ici à la recherche d'une réponse à une question plus générique, vous pouvez étendre le concept de classe statique si vous voulez que votre code ressemble à un fichier
enum
.L'approche suivante fonctionne lorsque vous n'avez pas finalisé le que
enum names
vous voulez et queenum values
sont lastring
représentation duenam name
; utiliseznameof()
pour simplifier votre refactoring.Cela réalise l'intention d'une énumération qui a des valeurs de chaîne (telles que le pseudocode suivant):
la source
J'ai créé une classe de base pour créer des énumérations à valeur de chaîne dans .NET. Il s'agit simplement d'un fichier C # que vous pouvez copier et coller dans vos projets, ou installer via le package NuGet nommé StringEnum .
Usage:
Caractéristiques
<completitionlist>
. (Fonctionne à la fois en C # et VB): ieInstallation
Soit:
.Net Standard 1.0
pour qu'il s'exécute sur.Net Core
> = 1.0,.Net Framework
> = 4.5,Mono
> = 4.6, etc.Newtonsoft.Json
prise en charge de la sérialisation, copiez plutôt cette version étendue. StringEnum.csJ'ai réalisé après coup que ce code est similaire à la réponse de Ben. Je l'ai sincèrement écrit à partir de zéro. Cependant, je pense qu'il a quelques extras, comme le
<completitionlist>
hack, la classe résultante ressemble plus à un Enum, aucune utilisation de réflexion sur Parse (), le package NuGet et le dépôt où j'espère aborder les problèmes entrants et les commentaires.la source
En me basant sur certaines des réponses ici, j'ai implémenté une classe de base réutilisable qui imite le comportement d'une énumération mais avec
string
comme type sous-jacent. Il prend en charge diverses opérations, notamment:.Equals
,==
et!=
Voici la classe de base dans son intégralité:
Et voici comment implémenter votre "string enum":
Qui pourrait être utilisé comme ceci:
J'espère que quelqu'un trouvera cela utile!
la source
Eh bien, vous essayez d'abord d'attribuer des chaînes et non des caractères, même s'il ne s'agit que d'un seul caractère. utilisez ',' au lieu de ",". La chose suivante est que les énumérations ne prennent que des types intégraux sans que
char
vous puissiez utiliser la valeur unicode, mais je vous conseillerais fortement de ne pas le faire. Si vous êtes certain que ces valeurs restent les mêmes, dans des cultures et des langues différentes, j'utiliserais une classe statique avec des chaînes const.la source
Bien qu'il ne soit vraiment pas possible d'utiliser a
char
ou astring
comme base pour une énumération, je pense que ce n'est pas ce que vous aimez vraiment faire.Comme vous l'avez mentionné, vous aimeriez avoir une énumération de possibilités et afficher une représentation sous forme de chaîne de cela dans une zone de liste déroulante. Si l'utilisateur sélectionne l'une de ces représentations de chaîne, vous souhaitez obtenir l'énumération correspondante. Et c'est possible:
Nous devons d'abord lier une chaîne à une valeur d'énumération. Cela peut être fait en utilisant ce
DescriptionAttribute
qui est décrit ici ou ici .Vous devez maintenant créer une liste de valeurs d'énumération et des descriptions correspondantes. Cela peut être fait en utilisant la méthode suivante:
Vous aurez maintenant une liste des paires de valeurs clés de toutes les énumérations et leur description. Alors affectons simplement ceci comme source de données pour une zone de liste déroulante.
L'utilisateur voit toutes les représentations sous forme de chaîne de l'énumération et dans votre code, vous obtiendrez la valeur d'énumération souhaitée.
la source
Nous ne pouvons pas définir l'énumération comme type de chaîne. Les types approuvés pour une énumération sont byte, sbyte, short, ushort, int, uint, long ou ulong.
Si vous avez besoin de plus de détails sur l'énumération, veuillez suivre le lien ci-dessous, ce lien vous aidera à comprendre l'énumération. Énumération
@ narendras1414
la source
Ça marche pour moi..
la source
Ce que j'ai récemment commencé à faire, c'est d'utiliser Tuples
la source
la source