c #: Comment utiliser enum pour stocker des constantes de chaîne?

Duplication possible:
Enum avec des cordes

il est possible d’avoir des constantes de chaînes dans enum comme

enum{name1="hmmm" name2="bdidwe"} 

si ce n’est pas le cas, quelle est la meilleure façon de le faire?

Je l’ai essayé son ne fonctionne pas pour la chaîne alors maintenant je regroupe tous les constnats liés dans une classe comme

  class operation { public const ssortingng name1="hmmm"; public const ssortingng name2="bdidwe" } 

Les constantes enum ne peuvent être que des types ordinaux ( int par défaut), vous ne pouvez donc pas avoir de constantes de chaîne dans les énumérations.

Quand je veux quelque chose comme un “enum basé sur des chaînes”, je crée une classe pour contenir les constantes comme vous l’avez fait, sauf que je fais une classe statique pour empêcher à la fois l’instanciation indésirable et le sous-classement indésirable.

Mais si vous ne souhaitez pas utiliser ssortingng comme type dans les signatures de méthode et que vous préférez un type plus sûr et plus ressortingctif (comme Operation ), vous pouvez utiliser le modèle enum sécurisé:

 public sealed class Operation { public static readonly Operation Name1 = new Operation("Name1"); public static readonly Operation Name2 = new Operation("Name2"); private Operation(ssortingng value) { Value = value; } public ssortingng Value { get; private set; } } 

Vous pouvez le faire en utilisant DescriptionAtsortingbute , mais vous devrez alors écrire du code pour obtenir la chaîne en dehors de l’atsortingbut.

 public enum YourEnum { [Description("YourName1")] Name1, [Description("YourName2")] Name2 } 

L’intérêt des énumérations est d’être des constantes ordinales.
Cependant, vous pouvez obtenir ce que vous voulez en utilisant une méthode d’extension:

  enum Operation { name1, name2 } static class OperationTextExtender { public static Ssortingng AsText(this Operation operation) { switch(operation) { case Operation.name1: return "hmmm"; case Operation.name2: return "bdidwe"; ... } } } ... var test1 = Operation.name1; var test2 = test1.AsText(); 

Votre classe d’ operation ne sera pas compilée telle quelle … vous n’avez pas déclaré le type de nom1 et nom2 …

Mais c’est l’approche que je prendrais … oui.

Si vous en faites une structure, elle devient alors un type de valeur qui peut être ou non ce que vous vouliez …