c #: ¿Cómo usar enum para almacenar constantes de cadena?

Posible duplicado:
Enum con cuerdas

es posible tener constantes de cadena enum como

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

si no es así, ¿cuál es la mejor manera de hacerlo?

Lo intenté, no funciona para la cadena, así que ahora estoy agrupando todos los contactos relacionados en una clase como

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

Las constantes de Enum solo pueden ser de tipos ordinales ( int por defecto), por lo que no puede tener constantes de cadena en enumeraciones.

Cuando quiero algo así como una “enumeración basada en cadenas”, creo una clase para mantener las constantes como lo hizo, excepto que lo hago una clase estática para evitar la creación de instancias no deseadas y la subclase no deseada.

Pero si no desea utilizar una cadena como el tipo en las firmas de método y prefiere un tipo más seguro y más restrictivo (como Operation ), puede usar el patrón de 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; } } 

Podrías hacer esto usando DescriptionAttribute , pero luego tendrías que escribir código para sacar la cadena del atributo.

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

El punto total de las enumeraciones es ser constantes ordinales.
Sin embargo, puede lograr lo que quiera utilizando un método de extensión:

  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(); 

Tu clase de operation no se comstackrá como es … no declaraste el tipo de nombre1 y nombre2 …

Pero ese es el enfoque que tomaría … sí.

Si lo convierte en una estructura, entonces se convierte en un tipo de valor que puede ser o no lo que usted quería …