c #: como usar enum para armazenar constantes de seqüência de caracteres?

Duplicar Possível:
Enum com cordas

é possível ter constantes de string em enum como

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

se não é assim, qual é a melhor maneira de fazer isso?

Eu tentei isso não está funcionando para string então agora eu estou agrupando todos os constnats relacionados em uma class como

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

As constantes Enum só podem ser de tipos ordinais ( int por padrão), portanto, você não pode ter constantes de string em enums.

Quando eu quero algo como um “enum baseado em string” eu crio uma class para manter as constantes como você fez, exceto que eu faço dela uma class estática para evitar tanto instanciações indesejadas quanto subclasss indesejadas.

Mas se você não quiser usar string como o tipo em assinaturas de método e preferir um tipo mais seguro e restritivo (como Operation ), você pode usar o padrão enum seguro:

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

Você poderia fazer isso usando DescriptionAttribute , mas teria que escrever código para obter a string do atributo.

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

O ponto inteiro de enums é ser constante ordinal.
No entanto, você pode conseguir o que deseja usando um método de extensão:

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

Sua class de operation não irá compilar como é … você não declarou o tipo de name1 e name2 …

Mas essa é a abordagem que eu tomaria … sim.

Se você fizer uma struct, então ela se torna um tipo de valor que pode ou não ser o que você queria …